(Prefacio: esta pregunta es sobre ASP.NET MVC 3.0 que se lanzó en 2011 , no se trata de ASP.NET Core 3.0 que se lanzó en 2019)
Quiero subir un archivo en asp.net mvc. ¿Cómo puedo cargar el archivo usando el input file
control html ?
c#
asp.net-mvc
asp.net-mvc-3
usuario637197
fuente
fuente
Respuestas:
No utiliza un control de entrada de archivo. Los controles del lado del servidor no se usan en ASP.NET MVC. Consulte la siguiente publicación de blog que ilustra cómo lograr esto en ASP.NET MVC.
Entonces comenzaría creando un formulario HTML que contendría una entrada de archivo:
y luego tendrías un controlador para manejar la carga:
fuente
<httpRuntime maxRequestLength="x" />
en su web.config, donde x es el número de KB permitido para cargar.Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })
. Esto es útil si se trata de una vista parcial que se llama desde múltiples vistas principales (o similar).para transferir a
byte[]
(por ejemplo, para guardar en DB):Para transferir el flujo de entrada directamente a la base de datos, sin almacenarlo en la memoria, puede usar esta clase tomada de aquí y un poco cambiada:
y el uso:
fuente
using (MemoryStream ms = new MemoryStream()) { /* ... */ }
File.ReadAllBytes
Método alternativo para transferir al byte [] (para guardar en DB).
El método de @ Arthur funciona bastante bien, pero no se copia perfectamente, por lo que los documentos de MS Office pueden no abrirse después de recuperarlos de la base de datos. MemoryStream.GetBuffer () puede devolver bytes vacíos adicionales al final del byte [], pero puede solucionarlo utilizando MemoryStream.ToArray () en su lugar. Sin embargo, encontré que esta alternativa funciona perfectamente para todos los tipos de archivos:
Aquí está mi código completo:
Clase de documento:
Descarga de archivos:
Subir archivo:
Ver (fragmento):
fuente
A menudo, también desea pasar un modelo de vista, y no el único archivo. En el siguiente código encontrará algunas otras características útiles:
Se podría hacer a través del siguiente código:
Asegúrate de tener
en su opinión para errores de validación.
También tenga en cuenta que la longitud máxima predeterminada de la solicitud es de 4 MB (maxRequestLength = 4096), para cargar archivos más grandes debe cambiar este parámetro en web.config:
(40960 = 40 MB aquí).
El tiempo de espera de ejecución es la cantidad total de segundos. Es posible que desee cambiarlo para permitir la carga de archivos enormes.
fuente
En la vista:
mientras que el siguiente código en el controlador:
fuente
Tengo que cargar el archivo en trozos de archivo de 100 kb y el último del almacén de archivos de carga en la base de datos usando el comando. Espero que te sea útil.
Javascript (Knockout Js)
Código HTML:
fuente
La forma en que hago la mía es más o menos como la anterior, le mostraré mi código y cómo usarlo con un DB MYSSQL ...
Tabla de documentos en DB -
Id int (PK), URL de cadena, Descripción de cadena, CreatedBy, TenancyId DateUploaded
La ID de código anterior, que es la clave principal, la URL es el nombre del archivo (con el tipo de archivo al final), la descripción del archivo para salir en la vista de documentos, Creado por quién cargó el archivo, tenancyId, dateUploaded
dentro de la vista debe definir el enctype o no funcionará correctamente.
El código anterior le dará el botón de exploración, luego dentro de mi proyecto tengo una clase básicamente llamada IsValidImage que simplemente verifica que el tamaño del archivo esté por debajo de su tamaño máximo especificado, verifica si es un archivo IMG, todo esto está en una función de clase bool. Entonces, si verdadero devuelve verdadero.
Entonces en el controlador:
fuente
fuente
Dando una solución completa
Primer uso de entrada. CShtml en la vista MVC
Ahora llama a Ajax
Controlador Json Call
fuente
Te estoy dando el método simple y fácil de entender y aprender.
Primero tiene que escribir el siguiente código en su archivo .Cshtml .
luego en su controlador ponga el siguiente código:
Para esto, debe crear las capas BAL y DAL según su base de datos.
fuente
Aquí está mi ejemplo de trabajo:
fuente
presta atención a este código solo para subir imágenes . Yo uso HTMLHelper para subir imágenes. en el archivo cshtml pon este código
luego cree un HTMLHelper para la etiqueta de carga
y finalmente en acción Sube tu archivo
fuente
fuente
carga de archivos usando formdata
archivo .cshtml
Código del lado del servidor
fuente
Manera simple de guardar múltiples archivos
cshtml
Controlador
fuente
Dado que he encontrado un problema al cargar el archivo en el navegador IE, sugeriría manejarlo de esta manera.
Ver
Controlador
fuente
HTML:
Código detrás:
fuente
Mira mi solución
agrega estas funciones en tu
base controller
para que puedas usarlas enall controllers
mira cómo usarlo
y aquí hay un ejemplo completo
fuente
En el controlador
En vista
En clase modal
Cree una carpeta como cargas en la carpeta Contenido en el proyecto
fuente
La mayoría de las respuestas parecen lo suficientemente legítimas, aunque hice un proyecto de muestra para usted en donnetfiddle
Estoy usando LumenWorks.Framework para el trabajo de CSV pero no es imprescindible.
Manifestación
Ver
Controlador:
fuente
Me he enfrentado a este mismo error mientras estoy haciendo el concepto de carga de archivos. Sé muchas respuestas proporcionadas por los desarrolladores para esta pregunta.
Aunque es por qué estoy respondiendo a esta pregunta, tengo este error por el error de desatención mencionado a continuación.
Al asignar el atributo de nombre, asegúrese de que el parámetro del controlador también tenga el mismo valor de nombre "uploadedFile". Me gusta esto :
de lo contrario no se asignará.
fuente