2012-05-30 28 views
12

Non dovrebbe essere così difficile scoprire come farlo. Fondamentalmente sto provando a prendere una stringa e lasciare che il client la salvi quando fanno clic su un pulsante. Dovrebbe apparire con una finestra di dialogo Salva/Apri. Nessun campanello extra e fischietti o altro. Non è scienza missilistica, (o così avrei pensato).Richiedi all'utente di salvare/aprire il file in ASP.NET C#

Sembra esserci un sacco di modi diversi (StreamWriter, HttpResponse, ecc.), Ma nessuno degli esempi che sono riuscito a trovare funziona correttamente o spiega cosa sta succedendo. Grazie in anticipo.

Un esempio uno dei tanti blocchi di codice che ho trovato ...

(Questo è solo un esempio, sentitevi liberi di non basare la vostra risposta intorno a questo.)

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(); 

Linea 2 dice di sostituire quella stringa. Come? Questo codice è stato pubblicizzato come una finestra di dialogo. Non dovrei dover impostare un percorso nel codice, giusto?

EDIT: esito finale (A cura di nuovo, Elimina deve venire prima della fine();)

 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

questo esempio viene illustrato come per lo streaming di un file indietro al cliente. Stai cercando un modo per richiamare una finestra di dialogo salva/apri sul client in modo che tu possa caricare un file sul tuo server? –

+0

"Fondamentalmente sto provando a prendere una stringa e lasciare che il client la salvi quando fa clic su un pulsante." Qualcosa di semplice come ... File.WriteAllText ("C: \\ text.txt", "ciao"); Tranne che con una finestra di dialogo. Voglio che l'utente lo scarichi in qualunque posizione specificata. – Ber53rker

risposta

5

Linea 2 (FilePath) indica il percorso del file sul server

Linea 8:

response.TransmitFile(FilePath); 

Trasmette che file specifico per il cliente e questo è ciò che si apre la finestra di salvataggio.

Se non trasmettere il file, non sono sicuro se la finestra di pop-up a tutti (anche se si imposta un colpo di testa)

In ogni modo, penso che la linea 8 dovrebbe leggere:

response.TransmitFile(FilePath + FileName); 
1

FilePath si suppone per puntare al file che si desidera inviare al client. Questo è il percorso sul server.

3

Ci sarà una finestra di dialogo predefinita dal browser, se troverà la risposta come un file. Se si desidera browser per visualizzare quella finestra di dialogo predefinita, tutto quello che dovete fare è inviare la risposta al browser come file, che si può fare in diversi modi:

  1. Se si tratta di un file statico,

    • il modo migliore è solo menzionare il percorso del file nel tag di ancoraggio href. (Ovviamente se non si hanno problemi di sicurezza)
    • Appena fuori insieme con la tua risposta, il modo in cui è fatto nel tuo esempio.
    • Altri modi è possibile fare riferimento qui 4 ways to send pdf from asp.net
  2. Se si tratta di un file dinamico che è necessario generare in fase di esecuzione, si può fare un trucco, generare il file da filestream, dirla in qualche cartella temporanea al server, leggerlo come un file statico come menzionato sopra.

1

Basta usare questo codice dovrebbe funzionare per richiedere all'utente di aprire una finestra di dialogo per aprire o salvare il file sul 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 Sto facendo la stessa cosa per Excel e dati che vanno fino al client (controllato in strumenti di sviluppo) ma non richiede un salvataggio di file. –

Problemi correlati