Se il percorso dove sono i file è fuori dal sito l'unico modo è leggere uno stream da disco andando a puntarlo direttamente,
in C# una cosa del genere:
Questo metodo ritorna un'array di byte che sono il contenuto del file.
Come vedi al metodo devi passare il percorso completo del file da leggere (quindi d:\path\file.pdf per esempio)
codice://Metodo che permette di effettuare il download public static byte[] DownloadFile(System.String m_strFilePath) { //Dichiarazione membri interni System.Byte[] m_byteFile = null; System.IO.FileStream m_StaticFileStream = null; try { //Recupero i byte del file leggendolo da uno stream m_StaticFileStream = new FileStream(m_strFilePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); m_byteFile = new byte[m_StaticFileStream.Length]; m_StaticFileStream.Read(m_byteFile, 0, m_byteFile.Length); m_StaticFileStream.Close(); //Chiamo le funzionalità per forzare il download if (m_byteFile.Length > 0) { return m_byteFile; } else { //Rilancio eccezione throw new Exception("File non trovato."); } } catch { //Rilancio eccezione throw; } finally { //Stacco oggetto m_StaticFileStream = null; } }
Queti byte li devi leggere da una pagina apposita tipo download.aspx a cui passerai i riferimenti del file.
In questa pagina dovrai forzare gli header http per fare il download
codice://Recupero i dati per il download m_byteFile = Global.Common.FileSystem.FileOperation.DownloadFile(this.FilePath); //Clear del contesto HttpContext.Current.Response.Clear(); //Imposto l'header HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename="+this.FileName.ToString()); HttpContext.Current.Response.AddHeader("Pragma", "public"); HttpContext.Current.Response.AddHeader("Cache-Control","max-age=0"); HttpContext.Current.Response.AddHeader("Content-Length", m_byteFile.Length.ToString()); HttpContext.Current.Response.ContentType = "application/save; name=" + this.FileName; //Scrittura dei Byte HttpContext.Current.Response.BinaryWrite(m_byteFile); HttpContext.Current.Response.Flush(); HttpContext.Current.Response.End();

Rispondi quotando