6 messaggi dal 01 giugno 2015
Buongiorno

ho la necessità di scaricare alcuni file presenti su una cartella del server, i file sono stati precedentemente caricati tramite una pagina web creata ad hoc da me. Fin qua tutto ok, quando invece effettuo l 'operazione di download dei file caricati, il download avviene regolarmente ma se tento di aprire il file scaricato (pdf in questo caso) lo stesso non si apre e mi visualizza un errore. Curiosamnete tutti i file che scarico hanno dimensione 1 kb ??? questo mi lascia perplesso in quanto nella cartella del server la loro dimensione è notevolmente maggiore.
per il download uso questo metodo:

private void FileDownLoad(string filename)
{
string remoteUrl = "http://localhost:6718/Download/";
string path = null;

WebClient myWebClient = new WebClient();
path = remoteUrl + filename;

Response.ClearContent();
Response.AddHeader("Content-Disposition", "attachment; filename =" + filename);
Response.AddHeader("Content-Length", filename.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.Write(filename);
Response.End();


}

so che si può tramite web config aumentare la grandezza del file in upload, mi chiedevo se c'era anche la possibilità di variare quella di download.
Ringrazio anticipatamente per le vostre risposte.

Ivano
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao Ivano,
prova ad aprire uno dei file da 1KB con blocco note (eventualmente rinominalo in .txt) e vedrai che al suo interno si trova giusto il nome del file tipo documento.pdf (ma potrebbe anche essere diverso).

Questo si spiega perché il tuo metodo FileDownload sta mandando questo al client:
Response.Write(filename);


Cioè gli stai mandando il percorso del file, anziché i bytes del file stesso.
Il metodo che si usa per inviare un file al client è Response.TransmitFile, come indicato in questo script di Daniele.

Quindi prova a riscrivere così il tuo metodo FileDownload. (Il WebClient non serve in questo caso, dato che i file sono già sullo stesso server in cui sta girando l'applicazione).
private void FileDownLoad(string filename)
{
    Response.ClearContent();
    Response.AddHeader("Content-Disposition", "attachment; filename =" + filename);
    Response.ContentType = "application/octet-stream";
    string filePath = Server.MapPath("~/cartellaInCuiSiTrovaIlFile/" + filename);
    Response.TransmitFile(filePath);
    Response.End();
}


La parte critica è quella in cui valorizzi la variabile filePath. Devi fare in modo che in quella variabile ci finisca il percorso fisico assoluto del file (es. C:\inetpub\wwwroot\cartella\file.pdf). Io qui l'ho realizzato a partire dal percorso relativo alla root dell'applicazione web e usando Server.MapPath per convertirlo in percorso assoluto.

ciao,
Moreno

Enjoy learning and just keep making

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.