(Préface: cette question concerne ASP.NET MVC 3.0 qui a été publié en 2011 , pas ASP.NET Core 3.0 qui a été publié en 2019)
Je veux télécharger un fichier dans asp.net mvc. Comment puis-je télécharger le fichier en utilisant le input file
contrôle html ?
c#
asp.net-mvc
asp.net-mvc-3
user637197
la source
la source
Réponses:
Vous n'utilisez pas de contrôle d'entrée de fichier. Les contrôles côté serveur ne sont pas utilisés dans ASP.NET MVC. Consultez le billet de blog suivant qui illustre comment y parvenir dans ASP.NET MVC.
Vous commenceriez donc par créer un formulaire HTML qui contiendrait une entrée de fichier:
puis vous auriez un contrôleur pour gérer le téléchargement:
la source
<httpRuntime maxRequestLength="x" />
dans votre web.config, où x est le nombre de Ko autorisés pour le téléchargement.Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })
. Ceci est utile s'il s'agit d'une vue partielle qui est appelée à partir de plusieurs vues parent (ou similaires).vers lequel effectuer le transfert
byte[]
(par exemple pour l'enregistrement dans la base de données):Pour transférer le flux d'entrée directement dans la base de données, sans le stocker dans la mémoire, vous pouvez utiliser cette classe prise d' ici et un peu modifiée:
et l'utilisation:
la source
using (MemoryStream ms = new MemoryStream()) { /* ... */ }
File.ReadAllBytes
Méthode alternative pour transférer vers l'octet [] (pour l'enregistrement dans la base de données).
@ La méthode d'Arthur fonctionne plutôt bien, mais ne se copie pas parfaitement, de sorte que les documents MS Office peuvent ne pas s'ouvrir après les avoir récupérés de la base de données. MemoryStream.GetBuffer () peut renvoyer des octets vides supplémentaires à la fin de l'octet [], mais vous pouvez résoudre ce problème en utilisant MemoryStream.ToArray () à la place. Cependant, j'ai trouvé que cette alternative fonctionnait parfaitement pour tous les types de fichiers:
Voici mon code complet:
Classe de document:
Téléchargement de fichier:
Téléchargement de fichiers:
Vue (extrait):
la source
Souvent, vous souhaitez également transmettre un modèle de vue, et non le seul fichier. Dans le code ci-dessous, vous trouverez d'autres fonctionnalités utiles:
Cela pourrait être fait via le code suivant:
Assurez-vous que vous avez
à votre avis pour les erreurs de validation.
Gardez également à l'esprit que la longueur de demande maximale par défaut est de 4 Mo (maxRequestLength = 4096), pour télécharger des fichiers plus volumineux, vous devez modifier ce paramètre dans web.config:
(40960 = 40 Mo ici).
Le délai d'exécution est le nombre entier de secondes. Vous voudrez peut-être le modifier pour permettre d'importants téléchargements de fichiers.
la source
Dans la vue:
tandis que le code suivant dans le contrôleur:
la source
Je dois télécharger le fichier dans des morceaux de fichier de 100 Ko et le dernier magasin de fichiers de téléchargement dans la base de données à l'aide de la commande. J'espère que cela vous sera utile.
Javascript (Knockout Js)
Code HTML:
la source
Comment je fais le mien est à peu près comme ci-dessus je vais vous montrer mon code et comment l'utiliser avec une base de données MYSSQL ...
Table de documents en DB -
int Id (PK), chaîne URL, chaîne Description, CreatedBy, TenancyId DateUploaded
L'ID de code ci-dessus, étant la clé primaire, l'URL étant le nom du fichier (avec le type de fichier à la fin), la description du fichier à afficher dans la vue des documents, CreatedBy étant celui qui a téléchargé le fichier, tenancyId, dateUploaded
à l'intérieur de la vue, vous devez définir le type d'activation, sinon cela ne fonctionnera pas correctement.
Le code ci-dessus vous donnera le bouton Parcourir, puis dans mon projet, j'ai une classe essentiellement appelée IsValidImage qui vérifie simplement que la taille du fichier est inférieure à votre taille maximale spécifiée, vérifie s'il s'agit d'un fichier IMG, tout cela dans une fonction bool de classe. Donc, si vrai renvoie vrai.
Donc, dans le contrôleur:
la source
la source
Donner une solution complète
Utilisez d'abord l'entrée dans. CShtml dans la vue MVC
Appelez maintenant Ajax
Contrôleur Json Call
la source
Je vous donne la méthode simple et facile à comprendre et à apprendre.
Vous devez d'abord écrire le code suivant dans votre fichier .Cshtml .
puis dans votre contrôleur mettez le code suivant:
Pour cela, vous devez créer des couches BAL et DAL selon votre base de données.
la source
Voici mon exemple de travail:
la source
veuillez faire attention à ce code pour télécharger l'image uniquement . J'utilise HTMLHelper pour télécharger l'image. dans le fichier cshtml mettre ce code
puis créez une balise HTMLHelper for Upload
et enfin en action Téléchargez votre fichier
la source
la source
téléchargement de fichiers à l'aide de formdata
Fichier .cshtml
Code côté serveur
la source
Un moyen simple d'enregistrer plusieurs fichiers
cshtml
Manette
la source
Depuis que j'ai trouvé un problème de téléchargement de fichier dans le navigateur IE, je suggère de le gérer comme ceci.
Vue
Manette
la source
Html:
Code derrière:
la source
Commander ma solution
ajoutez ces fonctions dans votre
base controller
afin que vous puissiez les utiliser dansall controllers
vérifier comment l'utiliser
et voici un exemple complet
la source
Dans le contrôleur
En vue
En classe modale
Créer un dossier en tant que téléchargements dans le dossier Contenu du projet
la source
La plupart des réponses semblent assez légitimes même si j'ai fait un exemple de projet pour vous sur donnetfiddle
J'utilise LumenWorks.Framework pour le travail CSV mais ce n'est pas un must have.
Démo
Vue
Manette:
la source
J'ai rencontré cette même erreur pendant que je fais le concept de téléchargement de fichiers. Je connais beaucoup de réponses fournies par les développeurs pour cette question.
Même si je réponds à cette question, j'ai cette erreur par l'erreur inattentive mentionnée ci-dessous.
Tout en donnant l'attribut name, assurez-vous que vos paramètres de contrôleur ont également la même valeur de nom "uploadFile". Comme ça :
sinon, il ne sera pas cartographié.
la source