2011-12-26 14 views
5

Estoy usando asp.net mvc y tengo una sección donde un usuario puede subir imágenes. Me pregunto dónde debería guardarlos.¿Debo guardar los archivos cargados (img) en App_Data?

Yo estaba siguiendo this tutorial y parece guardarlo en la aplicación de datos. Sin embargo, leí a otra persona diciendo que solo debería contener su base de datos.

No estoy seguro de cuáles son las ventajas de usar app_data. Estoy en un alojamiento compartido, así que no sé si eso hace la diferencia.

Editar

Tengo la intención de almacenar la ruta de las imágenes en la base de datos. Los usaré en una etiqueta de imagen y los presentaré al usuario cuando accedan a mi sitio. Tengo un cargador de archivos que solo esperará imágenes (la verificación será del cliente y del servidor)

+0

Almacena el contenido de la imagen en el sistema de archivos y la ruta de la imagen en la base de datos. ¿Por qué? Lea [esta publicación] (http: // stackoverflow.com/questions/561447/store-images-as-files-or-in-the-database-for-a-web-app) –

+0

Pequeña observación: si alguna vez en el futuro necesita escalar horizontalmente, almacenar el contenido cargado en una carpeta en su servidor web se convertirá en un problema. Si esto le preocupa, considere usar servicios como almacenamiento de blobs azul, almacenamiento simple de Amazon o incluso una base de datos como lo sugieren algunas de las respuestas a continuación. – santiagoIT

Respuesta

4

El tutorial es un ejemplo simple, y si lee los comentarios, el código original solo se guardó en un directorio uploads, no app_data a la vista.

Se cambió a app_data porque es una carpeta especial, una que no permitirá la ejecución del código.

Y usted ha entendido correctamente - app_data es realmente allí para la celebración de bases de datos basadas en archivos. Ese es el significado de la carpeta. Como tal, guardar imágenes en él no parece ser lo correcto.

Si está seguro de que solo se subirán las imágenes (y las controla), sugeriría un directorio /uploads - una ubicación reservada para imágenes que tampoco permitirán la ejecución de código (algo que debería poder controlar a través de IIS)

+0

¿Las cargas son una carpeta especial o algo que acaba de hacer? – chobo2

+0

@ chobo2 - Solo algo que mencioné como se hizo originalmente en el artículo al que vinculó. – Oded

+0

No sé cuánto control tengo en IIS ya que dije que estoy usando hosting compartido. Guardaré la ruta relativa en la base de datos y obtendré la ruta completa que se usará en una etiqueta img. Entonces no estoy seguro de si eso cuenta como la ejecución del código. – chobo2

1

Yo diría que eso depende de lo que harás con esas imágenes más adelante. Si usa esas imágenes en una etiqueta img, puede guardarlas en algún lugar de la estructura del contenido/carpeta.

Si no los necesita accesibles desde el exterior, o necesita transmitirlos nuevamente, puede almacenarlos fuera de la raíz web si el hoster lo permite.

No los almacenaría en app_data, ya que personalmente creo que es más una convención almacenar allí una base de datos. La mayoría de los desarrolladores que no están familiarizados con ese producto no buscarían la imagen.

Pero: podría almacenar binarios en una base de datos (aunque probablemente no sea lo mejor), por lo que una referencia en una base de datos que apunta a un archivo en el mismo directorio tiene sentido nuevamente.

Creo que es más una cuestión de opinión que una cuestión técnica.

0

Prefiero guardarlos en la base de datos. Al almacenar imágenes en el sistema de archivos, he descubierto que puede ser un poco más difícil administrarlas. Con una base de datos puede cambiar rápidamente el nombre de los archivos, eliminarlos, copiarlos, etc. Puede hacer lo mismo cuando están en el sistema de archivos, pero se necesita cierto conocimiento sobre scripts.

Plus Prefiero no administrar rutas y ubicaciones de archivos, que es otro voto para la base de datos. Esos valores de ruta siempre llegan a la web.config y puede ser más difícil de implementar y administrar.

+1

La única vez que idealmente almacenaría en una base de datos es cuando usa un tipo de archivo SQL que se asigna al sistema de archivos. Las implicaciones de rendimiento son bien conocidas cuando no. –

Cuestiones relacionadas