ASP.net скачать и сохранить файл в папке пользователя

Я пытаюсь сохранить файл на пользовательский компьютер, но не могу этого сделать. Этот метод дает ошибку, так как пытается где-то сохранить файл на C. Я понимаю, что это не целесообразно. Я хотел бы сохранить файл в папке загрузки или предложить пользователю диалоговое окно с файлом.

void SaveReport(Telerik.Reporting.Report report, string fileName)
{
    ReportProcessor reportProcessor = new ReportProcessor();
    Telerik.Reporting.InstanceReportSource instanceReportSource = new Telerik.Reporting.InstanceReportSource();
    instanceReportSource.ReportDocument = report;
    RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

    using (FileStream fs = new FileStream(fileName, FileMode.Create))
    {
        fs.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
    }
}

Как я могу сохранить файл в папке загрузки на компьютере пользователя или запросить файловый диалог, чтобы пользователь мог выбрать место назначения?


person Nullbyte    schedule 06.07.2014    source источник
comment
filestream будет записывать в файл на сервере, а не на клиентской машине. Попробуйте записать байты документа в выходной поток ответа и http-заголовок content-disposition в ответ.   -  person gp.    schedule 06.07.2014


Ответы (2)


Вы не можете указать место, куда загружается файл.

В вашем коде вы должны писать не в файл, а в OutputStream из ответа.

RenderingResult result = reportProcessor.RenderReport("PDF", instanceReportSource, null);

HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"file.pdf\"");
HttpContext.Current.Response.OutputStream.Write(result.DocumentBytes, 0, result.DocumentBytes.Length);
person Patrick Hofman    schedule 06.07.2014
comment
Происходит что-то другое, но файл не загружается. Он отображается в браузере полностью перепутанным. - person Nullbyte; 06.07.2014
comment
Большое спасибо за поддержку. Я очень ценю дополнительную помощь. Это работает нормально. - person Nullbyte; 06.07.2014

Filestream будет записывать в файл на сервере, а не на клиентской машине.

Попробуйте записать байты документа в выходной поток ответа и заголовок content-disposition http в ответ.

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

Это предложит пользователю загрузить файл в зависимости от настроек браузера.

Вы не можете контролировать, какой файл каталога находится на клиентской машине.

person gp.    schedule 06.07.2014
comment
Я пытаюсь использовать ваш код. Как мне интегрировать это в мой код? Извините, но я действительно новичок в самообучении. - person Nullbyte; 06.07.2014