2010-03-22 12 views
5

He estado trabajando en una aplicación web asp, que implica que el usuario registra detalles de una persona, incluida una imagen de la persona. El nombre de archivo de los detalles/imagen se almacena en una base de datos SQL con el nombre de archivo de la imagen almacenado en una columna NVARCHAR, en lugar de almacenar la imagen real en el DB.Imágenes que no se resuelven en asp webapp (C#)

Creé un directorio C: \ Imágenes a las cuales los archivos de imagen serían almacenados por la aplicación. La aplicación funciona correctamente en la medida en que mueve las imágenes a esta ubicación, pero cuando abro la página que mostraría los detalles/imagen, la imagen nunca se renderiza.

Lo solucioné durante el desarrollo al tener la imagen almacenada en una carpeta que era parte del proyecto, pero después del lanzamiento del proyecto al servidor, la aplicación se niega a permitir que la imagen se guarde en cualquier directorio dentro de C:\Inetpub\wwwroot\ .

Debo averiguar por qué las imágenes no se mostrarán cuando se almacenen en carpetas que no están dentro del proyecto.

He comprobado la fuente de la página HTML que también apunta a la ubicación y el nombre correcto:

img id="ctl00_MainContent_CandidateImage" src="C:\Images\applicant11.jpg" alt="Candidate Image" style="border-width:1px;border-style:solid;height:208px;width:208px;" 

El código detrás de la página procesa la imagen en el código de abajo:

// CandidatePhoto filename retrieved from DB. 

CandidateImage.ImageUrl = "C:\\Images\\" + CandidatePhoto; 

¿Alguien tiene alguna idea?

¡Salud!

Respuesta

1

Compruebe los permisos en la carpeta en el servidor. Puede haberlo copiado desde su máquina de desarrollo con permisos exclusivos de su computadora que limitan el acceso de otros.

+0

Los permisos no van a importar si el enlace de la imagen apunta a C: \ – chris

6

Cuando esto hace que en el navegador, estás efectivamente diciendo que se vea en la unidad C: del cliente para la imagen que enseñar ...

No sé por qué no se puede guardar con wwwroot, este es probablemente solo un problema de permisos, y podría superarse, o podría crear un directorio virtual dentro de su sitio que apunte a su carpeta de imágenes y use esta URL de directorio virtual en su página.

+0

Ah, ahora lo entiendo - me confundí al trabajar ejecutando la aplicación web en mi máquina local y ejecutándola en el servidor usando localhost. He actualizado los permisos en wwwroot para permitir tanto como sea posible y todavía tengo un error acerca de que la carpeta "~/Images /" no se ha rooteado ... Continuaré retocando y actualizaré cuando con suerte lo resuelva. – gordonk

+0

@gordonk - entonces creo que lo que podría estar buscando es Server.MapPath ("~/images") para obtener una ruta física a la carpeta de imágenes. – Paddy

1

El problema con su imagen es que se refiere a una ubicación en SU ​​computadora, en lugar de a una URL relativa a la ubicación del archivo. Para que el navegador pueda representar la imagen, debe poder acceder a la URL de esa imagen. Lo que está diciendo efectivamente al navegador es encontrar la imagen en la computadora de los usuarios, en su lugar, en el servidor

+0

La imagen se carga desde la PC del usuario a la unidad especificada en el servidor, lo que sucede con éxito. No lo dejé claro en mi pregunta, lo siento. – gordonk

3

Sus imágenes deben ser algo así como /images/bob.jpg en relación con la aplicación, no una unidad OS, incluso si esto es una ruta virtual ... pero las imágenes no estarán en el disco C:\ del cliente en ningún caso.

Si tuviera un directorio virtual Images/ en la Solicitud de IIS/Sitio, y que apuntaban a C:\Images en el servidor, sus URL se vería así:

CandidateImage.ImageUrl = "~/Images/" + CandidatePhoto; 

To create a virtual directory like this, see here

1

No se puede ponga la ruta "c: \ images", porque cuando se represente la imagen, el navegador buscará la imagen en la máquina del cliente.Se puede hacer una de estas dos soluciones:

  1. se puede crear el directorio "/ images" en su sitio web y establecer el sitio de "hacerse pasar" algún usuario, y establecer los permisos para ese usuario para que le permitiera escribe en esta carpeta Y en imageUrl pondrás algo como esto: "/images/image01.jpg".

  2. Puede crear una página que represente la imagen, y pasar una identificación de la imagen por correo o cadena de consulta. Algo como "ImageRender.aspx? ID = 123". Y la página cargará la imagen de "c: \ images" y escribirá la imagen en la respuesta de la página. Y a ti ImageURL siempre pondrás "ImageRender.aspx? ID = [ID de imagen]".

Espero que esto ayude.

1

Gracias a todos por sus ideas.

Llegamos allí añadiendo el usuario del servidor \ IUSER_SERVERNAME con permisos de lectura/escritura a wwwroot/Imágenes

Luego, utilizando Server.MapPath ("~/images") para guardar las imágenes en el directorio en el servidor

Luego simplemente renderizando las imágenes desde ("~/Images") + CandidatePhoto como estaba antes.

¡Gracias nuevamente!

Cuestiones relacionadas