Pourquoi mes codes suivants fonctionnent parfois, mais parfois cela ne fonctionne pas?
private bool UploadFile(IFormFile ufile, string fname) { if (ufile.Length > 0) { string fullpath = Path.Combine(_env.WebRootPath, fname); using (var fileStream = new FileStream(fullpath, FileMode.Create)) { ufile.CopyToAsync(fileStream); } return true; } return false; }
Le code a réussi à enregistrer l'image dans un dossier que j'ai créé sous wwwroot , mais l'image n'apparaît pas, et même dans Visual Studio.
Y a-t-il un moyen de le résoudre?
Merci.
Même lorsque j'ouvre l'explorateur de fichiers du dossier qui stocke les images, l'image est comme si elle était là mais ne montre aucune image.
3 Réponses :
Essayez ce qui suit. Le fichier sera téléchargé dans le dossier images
sous le dossier wwwroot
.
private async Task<bool> UploadFile(IFormFile ufile) { if (ufile != null && ufile.Length > 0) { var fileName = Path.GetFileName(ufile.FileName); var filePath = Path.Combine(Directory.GetCurrentDirectory(), @"wwwroot\images", fileName); using (var fileStream = new FileStream(filePath, FileMode.Create)) { await ufile.CopyToAsync(fileStream); } return true; } return false; }
Puis-je savoir ce que signifie «attendre ufile.CopyToAsync (fileSteam)»?
Il s'agit d'une méthode asynchrone qui copie le FileStream
dans le chemin spécifié
Mais quelle est la différence entre télécharger les fichiers image sur wwwroot / images et wwwroot / myFolder?
Aucune différence mais je viens d'utiliser un exemple de nom comme images
. Vous pouvez également utiliser votre dossier nommé comme: var filePath = Path.Combine (Directory.GetCurrentDirectory (), "wwwroot \\ yourfolderaname", fileName);
@Matt Une mise à jour? Que votre problème soit résolu ou non!
Non ... toujours en train d'essayer
Laissez-nous poursuivre cette discussion dans le chat .
Veuillez ne pas utiliser Directory.GetCurrentDirectory ()
à l'intérieur de votre code. Utilisez l'environnement d'hébergement pour récupérer l'emplacement de la racine de contenu.
@poke Merci! mais une explication s'il vous plaît?
Utilisez plutôt GetCurrentDirectory: stackoverflow.com/questions/43709657/...
J'ai eu le même problème avec dot net core, voici ce que j'ai fait:
-Faire un répertoire virtuel
-Mappez-le à ce chemin de dossier (à l'intérieur de wwwroot)
-Rendez votre chemin complet
égal à ce VD; chemin absolu (peut le conserver dans le fichier de configuration)
-Donner les autorisations d'écriture pour ce dossier à iisuser
Salut merci pour l'aide, avez-vous des captures d'écran pour chaque étape que cela ne vous dérange pas de partager avec moi?
autorisez l'accès aux fichiers statiques, ajoutez simplement cette ligne dans votre fichier startup.cs sous la méthode Configure:
app.UseStaticFiles();
" mais l'image n'apparaît pas " vous voulez dire qu'elle n'apparaît pas dans le navigateur Internet? ou vous ne le voyez pas du tout même lorsque vous naviguez manuellement dans le navigateur de fichiers?
Mais parfois, cela se montre. Est-ce quelque chose à voir avec les paramètres ou les codes?
en fait, dire " parfois " n'est pas assez clair pour en connaître la raison, cela pourrait être la taille ou le type de fichier qui empêche le fichier d'être enregistré. Faites simplement des tests plus précis pour trouver quand les fichiers sont enregistrés et quand ils ne le sont pas, cela peut être facile à résoudre.
avez-vous des solutions avec lesquelles vous aimeriez partager?
Vérifiez cette réponse a >
il existe une propriété >> "Afficher tous les fichiers" dans la barre d'outils de l'explorateur de solutions de Visual Studio. Cliquez pour afficher ne pas inclure les fichiers qui seront alors disponibles pour la visualisation.
@HoomanBahreini Ce n'est pas correct. Le
WebRootPath
est lawwwroot
tandis queContentRootPath
serait l'emplacement que vous avez défini comme racine IIS pour l'application."mais parfois ça ne marche pas" - Qu'est-ce qui ne fonctionne pas exactement? Vérifiez vos journaux pour voir ce qui se passe. Et essayez de déboguer pour voir ce qui pourrait mal tourner.
@poke, merci de me l'avoir fait savoir.