Подтвердить что ты не робот

Загрузка файла ASP.NET с сервера

После того, как пользователь нажмет кнопку, я хочу, чтобы файл был загружен. Я пробовал следующее, которое, похоже, работает, но не исключает исключения (ThreadAbort), которое неприемлемо.

    System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
    response.ClearContent();
    response.Clear();
    response.ContentType = "text/plain";
    response.AddHeader("Content-Disposition", "attachment; filename=" + fileName + ";");
    response.TransmitFile(Server.MapPath("FileDownload.csv"));
    response.Flush();
    response.End();  
4b9b3361

Ответ 1

Вы можете использовать обработчик HTTP (.ashx) для загрузки файла, например:

DownloadFile.ashx:

public class DownloadFile : IHttpHandler 
{
    public void ProcessRequest(HttpContext context)
    {   
        System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
        response.ClearContent();
        response.Clear();
        response.ContentType = "text/plain";
        response.AddHeader("Content-Disposition", 
                           "attachment; filename=" + fileName + ";");
        response.TransmitFile(Server.MapPath("FileDownload.csv"));
        response.Flush();    
        response.End();
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }
}

Затем вы можете вызвать обработчик HTTP из обработчика события нажатия кнопки, например:

Разметка:

<asp:Button ID="btnDownload" runat="server" Text="Download File" 
            OnClick="btnDownload_Click"/>

Code-Behind:

protected void btnDownload_Click(object sender, EventArgs e)
{
    Response.Redirect("PathToHttpHandler/DownloadFile.ashx");
}

Передача параметра обработчику HTTP:

Вы можете просто добавить переменную строки запроса к Response.Redirect(), например:

Response.Redirect("PathToHttpHandler/DownloadFile.ashx?yourVariable=yourValue");

Затем в фактическом коде обработчика вы можете использовать объект Request в HttpContext, чтобы захватить значение переменной строки запроса, например:

System.Web.HttpRequest request = System.Web.HttpContext.Current.Request;
string yourVariableValue = request.QueryString["yourVariable"];

// Use the yourVariableValue here

Примечание - обычно передается имя файла как параметр строки запроса, чтобы предлагать пользователю, что такое файл на самом деле, и в этом случае они могут переопределить это имя с помощью Save As...

Ответ 2

Попробуйте этот набор кода для загрузки CSV файла с сервера.

byte[] Content= File.ReadAllBytes(FilePath)
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "attachment; filename=" + fileName + ".csv");
Response.BufferOutput = true;
Response.OutputStream.Write(Content, 0, Content.Length);
Response.End();

Ответ 3

Внесение изменений, как показано ниже, и перераспределение по типу содержимого сервера как

Response.ContentType = "application/octet-stream";

Это сработало для меня.

Response.Clear(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "application/octet-stream"; 
Response.WriteFile(file.FullName); 
Response.End();

Ответ 4

В дополнение к решению Карла Андерсона вы можете поместить свои параметры в информацию о сеансе, а затем очистить их после response.TransmitFile(Server.MapPath( Session(currentSessionItemName)));.

Подробнее о сеансах см. на странице MSDN HttpSessionState.Add Method (String, Object).

Ответ 5

protected void DescargarArchivo(string strRuta, string strFile)
{
    FileInfo ObjArchivo = new System.IO.FileInfo(strRuta);
    Response.Clear();
    Response.AddHeader("Content-Disposition", "attachment; filename=" + strFile);
    Response.AddHeader("Content-Length", ObjArchivo.Length.ToString());
    Response.ContentType = "application/pdf";
    Response.WriteFile(ObjArchivo.FullName);
    Response.End();


}

Ответ 6

Простое решение для загрузки файла с сервера:

protected void btnDownload_Click(object sender, EventArgs e)
        {
            string FileName = "Durgesh.jpg"; // It a file name displayed on downloaded file on client side.

            System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
            response.ClearContent();
            response.Clear();
            response.ContentType = "image/jpeg";
            response.AddHeader("Content-Disposition", "attachment; filename=" + FileName + ";");
            response.TransmitFile(Server.MapPath("~/File/001.jpg"));
            response.Flush();
            response.End();
        }