In una delle mie applicazioni Web asp.net ho bisogno di nascondere la posizione di un file pdf che viene offerto agli utenti.Cercare di eseguire lo streaming di un file PDF con asp.net sta producendo un "file danneggiato"
Così, sto scrivendo un metodo che recupera il suo contenuto binario dalla sua posizione su un sistema CMS e quindi scarica un array di byte per l'utente web.
Sto ricevendo, sfortunatamente, un errore durante il download del flusso: "Impossibile aprire il file perché è danneggiato" (o qualcosa di simile a questo, quando si apre il file in Adobe Reader).
Domanda 1: cosa sto facendo di sbagliato? Domanda 2: posso scaricare file di grandi dimensioni utilizzando questo approccio?
private void StreamFile(IItem documentItem)
{
//CMS vendor specific API
BinaryContent itemBinaryContent = documentItem.getBinaryContent();
//Plain old .NET
Stream fileStream = itemBinaryContent.getContentStream();
var len = itemBinaryContent.getContentLength();
SendStream(fileStream, len, itemBinaryContent.getContentType());
}
private void SendStream(Stream stream, int contentLen, string contentType)
{
Response.ClearContent();
Response.ContentType = contentType;
Response.AppendHeader("content-Disposition", string.Format("inline;filename=file.pdf"));
Response.AppendHeader("content-length", contentLen.ToString());
var bytes = new byte[contentLen];
stream.Read(bytes, 0, contentLen);
stream.Close();
Response.BinaryWrite(bytes);
Response.Flush();
}
Perché non utilizzare il metodo Response.WriteFile? –
Il file non esiste realmente nel file system. – Pablo
Per essere più chiari: il file esiste nel database CMS. È url indirizzabile, ma non posso davvero recuperare il file dal file system. – Pablo