2011-11-28 18 views
11

Questo è il codice per scaricare il file.Come aprire il file PDF in una nuova scheda o finestra invece di scaricarlo (usando asp.net)?

System.IO.FileStream fs = new System.IO.FileStream(Path+"\\"+fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); 
byte[] ar = new byte[(int)fs.Length]; 
fs.Read(ar, 0, (int)fs.Length); 
fs.Close(); 

Response.AddHeader("content-disposition", "attachment;filename=" + AccNo+".pdf"); 
Response.ContentType = "application/octectstream"; 
Response.BinaryWrite(ar); 
Response.End(); 

Quando questo codice viene eseguito, chiederà all'utente di aprire o salvare il file. Invece di questo ho bisogno di aprire una nuova scheda o finestra e visualizzare il file. Come posso raggiungere questo obiettivo?

NOTA:

file non sarà necessario essere situato nella cartella sito. Potrebbe trovarsi in un'altra cartella.

+4

Si potrebbe provare 'content-disposition: inline' invece di' attachment' - [vedere questo articolo] (http://dotanything.wordpress.com/2008/05/30/content-disposition-attachment-vs-inline /) –

+0

questo articolo potrebbe aiutarti http://aspalliance.com/259_downloading_files__forcing_the_file_download_dialog –

risposta

3

questo può aiutare

Response.Write("<script>"); 
Response.Write("window.open('../Inventory/pages/printableads.pdf', '_newtab');"); 
Response.Write("</script>"); 
+0

Come chiamerò quel file di download in questo ?? questo è il mio problema – smilu

+0

@smilu r u salvare il file o semplicemente crearlo per la lettura ?? – Karthik

+0

Dovrei crearlo per la lettura e in seguito può anche essere salvato. Il problema è che non posso dare il nome originale del file o del percorso con il file. Quindi devo fare il passaggio sopra per scaricarlo e quindi aprirlo con un altro nome. – smilu

14

Invece di caricamento di un torrente in un array di byte e la scrittura al flusso di risposta, si dovrebbe dare un'occhiata a HttpResponse.TransmitFile

Response.ContentType = "Application/pdf"; 
Response.TransmitFile(pathtofile); 

Se si desidera che il PDF per aprire in una nuova finestra dovresti aprire la pagina di download in una nuova finestra, ad esempio in questo modo:

<a href="viewpdf.aspx" target="_blank">View PDF</a> 
+0

Il primo passo mi interessa sapere di più. Il secondo passo non è pratico nel mio programma. bcz non posso inviare il percorso originale ad esso. Usando il primo passo posso reindirizzare il file in un'altra finestra? – smilu

+3

Non è possibile aprire una nuova finestra dal lato server. Dovrai aprire la pagina di download in una nuova finestra e in quella finestra utilizzare TransmitFile per restituire il file all'utente. – janzi

+0

come è il tuo link? Perché non puoi aggiungere un bersaglio ad esso? Puoi aggiungerlo con JavaScript se per qualche motivo non puoi modificare l'origine del tag (ad es. È generato per te) –

-4

Utilizzare questo codice. Funziona come un campione.

Process process = new Process(); 
process.StartInfo.UseShellExecute = true; 
process.StartInfo.FileName = outputPdfFile; 
process.Start(); 
+0

Ho provato questo metodo e funziona molto bene, grazie :) – JohnnyBizzle

+9

Il codice C# viene eseguito sul server. Pertanto, Process.Start avvia un processo sul server, non sul computer. È fondamentalmente impossibile per te avviare un processo direttamente sul client. – dnxit

+3

Sì, questa risposta è completamente sbagliata. –

1

È necessario creare un'altra pagina o un gestore generico con il codice per generare il pdf. Quindi quell'evento viene attivato e la persona viene reindirizzata a quella pagina.

4
Response.ContentType = contentType; 
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + fileName); 
Response.BinaryWrite(fileContent); 

E

<asp:LinkButton OnClientClick="openInNewTab();" OnClick="CodeBehindMethod".../> 

in JavaScript:

<script type="text/javascript"> 
    function openInNewTab() { 
     window.document.forms[0].target = '_blank'; 
     setTimeout(function() { window.document.forms[0].target = ''; }, 0); 
    } 
</script> 

Fare attenzione a ripristino bersaglio, altrimenti tutte le altre chiamate come Response.Redirect viene aperto in una nuova scheda, che potrebbe non essere ciò che vuoi.

0

è possibile restituire un FileResult dall'azione MVC.

********************* azione MVC ************

public FileResult OpenPDF(parameters) 
    { 
     //code to fetch your pdf byte array 
     return File(pdfBytes, "application/pdf"); 
    } 

*** js *********** **************

Usa formpost di inviare i dati per azione

var inputTag = '<input name="paramName" type="text" value="' + payloadString + '">'; 
    var form = document.createElement("form"); 
    jQuery(form).attr("id", "pdf-form").attr("name", "pdf-form").attr("class", "pdf-form").attr("target", "_blank"); 
    jQuery(form).attr("action", "/Controller/OpenPDF").attr("method", "post").attr("enctype", "multipart/form-data"); 
    jQuery(form).append(inputTag); 
    document.body.appendChild(form); 
    form.submit(); 
    document.body.removeChild(form); 
    return false; 

È necessario crea un modulo per pubblicare i tuoi dati, aggiungi il tuo dom, pubblica i tuoi dati e rimuovi il modulo del documento.

Tuttavia, il modulo non registra i dati nella nuova scheda solo su Browser EDGE.Ma una richiesta ottiene funziona come è solo aprendo una nuova scheda con un url contenente stringa di query per i parametri di azione.

Problemi correlati