2012-05-30 4 views
12

No debería ser tan difícil averiguar cómo hacerlo. Básicamente, estoy tratando de tomar una cadena y dejar que el cliente la guarde cuando hacen clic en un botón. Debería aparecer con un cuadro de diálogo Guardar/Abrir. Sin campanas ni silbatos ni nada. No es ciencia espacial, (o al menos eso pensé).Pedirle al usuario que guarde/abra el archivo en ASP.NET C#

Parece que hay un montón de formas diferentes (StreamWriter, HttpResponse, etc.), pero ninguno de los ejemplos que he podido encontrar funcionan correctamente o explican lo que está sucediendo. Gracias por adelantado.

Un ejemplo uno de los muchos bloques de código que he encontrado ...

(Esto es sólo un ejemplo, no dude en no basar su respuesta en torno a este.)

String FileName = "FileName.txt"; 
String FilePath = "C:/...."; //Replace this 
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
response.ClearContent(); 
response.Clear(); 
response.ContentType = "text/plain"; 
response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
response.TransmitFile(FilePath); 
response.Flush(); 
response.End(); 

Línea 2 dice que reemplazar esa cadena. ¿Cómo? Este código fue anunciado como un diálogo. No debería tener que establecer un camino en el código, ¿verdad?

EDIT: Resultado final (Editado nuevo, Borrar tiene que venir antes de Fin();)

 string FilePath = Server.MapPath("~/Temp/"); 
     string FileName = "test.txt"; 

     // Creates the file on server 
     File.WriteAllText(FilePath + FileName, "hello"); 

     // Prompts user to save file 
     System.Web.HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.ClearContent(); 
     response.Clear(); 
     response.ContentType = "text/plain"; 
     response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";"); 
     response.TransmitFile(FilePath + FileName); 
     response.Flush(); 

     // Deletes the file on server 
     File.Delete(FilePath + FileName); 

     response.End(); 
+0

Este ejemplo muestra cómo se debe transmitir un archivo de nuevo al cliente. ¿Está buscando una forma de invocar un diálogo de guardar/abrir en el cliente para que pueda subir un archivo a su servidor? –

+0

"Básicamente, estoy tratando de tomar una cadena y dejar que el cliente la guarde cuando hacen clic en un botón". Algo simple como ... File.WriteAllText ("C: \\ text.txt", "hola"); Excepto con un diálogo. Quiero que el usuario lo descargue a cualquier ubicación que especifiquen. – Ber53rker

Respuesta

5

Línea 2 (FilePath) indica la ruta de acceso al archivo de en el servidor

Línea 8:

response.TransmitFile(FilePath); 

Transmite ese archivo específico para el cliente y eso es lo que aparece el cuadro de diálogo guardar.

Si no transmita el archivo, no estoy seguro de si el diálogo aparecerá en absoluto (aunque establecer una cabecera)

De todas formas, creo que la línea 8 debe decir:

response.TransmitFile(FilePath + FileName); 
1

FilePath se supone que apunte al archivo que desea enviar al cliente. Esta es la ruta en el servidor.

3

Habrá un cuadro de diálogo predeterminado en el navegador, si encuentra Response como algún archivo. Si desea que el navegador para mostrar que el cuadro de diálogo por defecto, todo lo que necesita hacer es enviar la respuesta al navegador como archivo, que se puede hacer en varias maneras:

  1. Si se trata de un archivo estático,

    • La mejor manera es simplemente mencionar la ruta del archivo en el href de la etiqueta del anclaje (obviamente, si no tiene problemas de seguridad)
    • Acaba de salir junto con su respuesta, como se hace en su ejemplo.
    • Otras formas en las que puede hacer referencia aquí 4 ways to send pdf from asp.net
  2. Si se trata de un archivo dinámico que es necesario generar en tiempo de ejecución, se puede hacer un truco, generar el archivo de filestream, por decirlo de alguna carpeta temporal en el servidor, léelo de nuevo como un archivo estático como se mencionó anteriormente.

1

Sólo tiene que usar este código debería funcionar para solicitar al usuario a abrir un diálogo para abrir o guardar el archivo en el sistema ....

byte[] bytesPDF = System.IO.File.ReadAllBytes(@"C:\sample.pdf"); 

     if (bytesPDF != null) 
     { 

      Response.AddHeader("content-disposition", "attachment;filename= DownloadSample.pdf"); 
      Response.ContentType = "application/octectstream"; 
      Response.BinaryWrite(bytesPDF); 
      Response.End(); 
     } 
+0

BinaryWrite Estoy haciendo lo mismo para Excel y los datos que van hasta el cliente (revisado en las herramientas de desarrollo) pero no está pidiendo que se guarde el archivo. –

Cuestiones relacionadas