Abra el archivo físico en el servidor usando ASP.NET

Quiero abrir un archivo físico en el servidor al hacer clic en HyperLink.

<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#Eval("FullPath") %>' runat="server" Text="Open File" ></asp:HyperLink>

"FullPath" es como "E:\PINCDOCS\Mydoc.pdf"

Actualmente en Chrome recibo el error.

No se permite cargar recurso local:

¿Se puede hacer esto o alguna otra solución alternativa?

preguntado el 15 de mayo de 13 a las 04:05

Usa un botón de enlace; agregar controlador de eventos para el botón; abra el archivo en el lado del servidor (utilice Server.MapPath method); luego transmitir como pdf. Mejor, si es posible, copie ese archivo en su directorio de recursos estáticos y use un hipervínculo normal. -

Para permitir que el cliente descargue un archivo, necesita una URL, primero debe convertir la ruta local de su servidor en una URL. Aquí hay un enlace para hacerlo. stackoverflow.com/questions/16007/… -

3 Respuestas

El archivo físico debe estar ubicado dentro de un sitio web de IIS, un directorio virtual o una aplicación web. Entonces necesitaría crear un directorio virtual en E:\PINCDOCS. Consulte aquí para obtener instrucciones: http://support.microsoft.com/kb/172138

Luego, en su código detrás, puede usar código como: http://geekswithblogs.net/AlsLog/archive/2006/08/03/87032.aspx para obtener una URL para el archivo físico.

contestado el 15 de mayo de 13 a las 10:05

Además, si está en la misma red que el servidor, simplemente puede usar el nombre de la red: es decir, \\servername\e$\PINCDOCS\Mydoc.pdf y luego no tiene que meterse con IIS. - felipe pittle

//SOURCE
<asp:HyperLink ID="HyButton1" Target="_blank" NavigateUrl='<%#ful_path(Eval("")) %>' runat="server" Text="Open File" ></asp:HyperLink>//ful_path is c# function name

//C#:
protected string ful_path(object ob)
{
    string img = @Request.PhysicalApplicationPath/image/...;
    return img;
}

contestado el 15 de mayo de 13 a las 06:05

Cuando configura NavigateUrl en FullPath, Chrome verá el enlace local a la máquina del usuario que está accediendo al sitio y no al servidor en sí.

Por lo tanto, siempre debe hacer que la URL de cualquier hipervínculo tenga la forma de //someURL o http://someurl

En tu caso, tienes que quitar el NavigateUrl y agrega un OnClick controlador, y dentro del controlador, leerá el archivo usando FileStream y escribirá el contenido del archivo en el flujo de respuesta y luego lo vaciará

ejemplo del controlador de clics:

context.Response.Buffer = false;
context.Response.ContentType = "the file mime type, ex: application/pdf";
string path = "the full path, ex:E:\PINCDOCS";

FileInfo file = new FileInfo(path);
int len = (int)file.Length, bytes;
context.Response.AppendHeader("content-length", len.ToString());
byte[] buffer = new byte[1024];
Stream outStream = context.Response.OutputStream;
using(Stream stream = File.OpenRead(path)) {
    while (len > 0 && (bytes =
        stream.Read(buffer, 0, buffer.Length)) > 0)
    {
        outStream.Write(buffer, 0, bytes);
        len -= bytes;
    }
}

Respondido el 29 de Septiembre de 16 a las 14:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.