Загрузка силы файла на веб-сервере-.NET ASP C#

Используйте raw_input () вместо input ()

18
задан Sameet 16 May 2009 в 20:48
поделиться

4 ответа

Создайте отдельный обработчик HTTP (DownloadSqlFile.ashx):

<%@ WebHandler Language="C#" Class="DownloadHandler" %>

using System;
using System.Web;

public class DownloadHandler : IHttpHandler {
    public void ProcessRequest(HttpContext context) {
        var fileName = "myfile.sql";
        var r = context.Response;
        r.AddHeader("Content-Disposition", "attachment; filename=" + fileName);
        r.ContentType = "text/plain";
        r.WriteFile(context.Server.MapPath(fileName));
    }
    public bool IsReusable { get { return false; } }
}

Затем с помощью кнопки на странице ASP.NET перейдите к DownloadSqlFile.ashx .

29
ответ дан 30 November 2019 в 06:17
поделиться

Проблема в том, что вы используете код на той же странице, которая в данный момент загружена в браузер. Вы пытаетесь изменить поток ответов и расположение текущей загруженной страницы. Вместо этого создайте отдельный HttpHandler, как предложил Мехрдад. Затем, нажав кнопку, вы вызовете URL-адрес обработчика. Кнопка может быть даже простой гиперссылкой, исходный URL которой имеет следующий вид:

<a href="DownloadSqlFile.ashx">Download SQL</a>

Имеет смысл? Дело в том, что вы не можете изменить ответ уже загруженной страницы . Запустите новый запрос, используя обработчик для выполнения работы.

5
ответ дан 30 November 2019 в 06:17
поделиться

Вам необходимо сообщить браузер, что отправляемое вами сообщение не является HTML и не должно отображаться как таковое в браузере. Следующий код может быть использован для возврата некоторого текста в вашем серверном коде, и он представит пользователю диалоговое окно сохранения, как вы хотели:

Response.Clear(); //eliminates issues where some response has already been sent
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.sql", filename));
Response.Write(yourSQL);
Response.End();

filename : имя, которое вы хотите дать ему

yourSQL : содержимое файла sql

18
ответ дан 30 November 2019 в 06:17
поделиться

Добавьте Response.Clear перед Response.Write , чтобы исправить ошибку, если правильно указано в диалоговом окне Chrome.

Итак, чтобы интегрировать во фрагмент в другом ответе ...

//add this
Reponse.Clear(); 

//from other answer
Response.ContentType = "text/plain";
Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.sql", filename));
Response.Write(yourSQL);
Response.End;
1
ответ дан 30 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: