Обеспечение динамической загрузки файлов в ASP.NET2.0

Я хочу обеспечить динамическую загрузку файлов. Эти файлы могут быть созданы на лету на сервере, поэтому они представлены как byte [] и не существуют на диске. Я хочу, чтобы пользователь заполнил форму ASP.NET, нажал кнопку загрузки и вернул нужный файл.

Вот как выглядит мой код формы ASP.NET:

public partial class DownloadService : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}

protected void submitButtonClick(object sender, EventArgs e)
{
    if (EverythingIsOK())
    {
        byte[] binary = GenerateZipFile(); 
        Response.Clear();
        Response.ContentType = "application/zip";
        Response.ContentEncoding = System.Text.Encoding.UTF8;
        Response.BinaryWrite(binary);
        Response.End();
    }
}
...
}

Я ожидал, что этот фрагмент кода просто сработает. Я очищаю Respone, вставляю сгенерированный zip-файл и бинго. Тем не менее, это не так. В браузере появляется следующее сообщение:

Страница XML не может быть отображена Невозможно просмотреть ввод XML с помощью таблицы стилей. Исправьте ошибку и нажмите кнопку «Обновить» или повторите попытку позже. В текстовом содержимом обнаружен недопустимый символ. Ошибка обработки ресурса 'http: // localhost: 15900 / mywebsite / DownloadS ...

Что я делаю неправильно?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 915
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Информацию о приложении / zip см. В здесь. Возможно, ContentEncoding неверен. И вот руководство по отправке других типов. Также здесь - это руководство о том, как это сделать для PDF-файлов.

Ответ принят как подходящий

Вот небольшая модификация, которую вам нужно сделать:

Response.Clear();
Response.ContentType = "application/x-zip-compressed";
Response.BinaryWrite(binary);
Response.End();

На самом деле существует тип контента под названием appliaction / zip.

Filip Ekberg 22.01.2009 15:26

Да, я знаю, что есть тип содержимого application / zip. Я говорю о том, что вы должны вместо этого использовать application / x-zip-compressed, если хотите, чтобы ваше приложение правильно работало в IE.

Darin Dimitrov 22.01.2009 15:29

Фактически, в некоторых случаях IE пытается быть умным и использует функцию FindMimeFromData, чтобы угадать тип mime, игнорируя тот, который указан в заголовке Content-Type.

Darin Dimitrov 22.01.2009 15:41

@Darin: Означает ли это, что я должен использовать «image / pjpeg» для jpeg вместо «image / jpeg» и «image / x-png» вместо «image / png»? Плюс у меня есть вопрос. Разве я не могу использовать "" application / octet-stream "для всех типов ?? или я должен определить тип контента для каждого типа? Спасибо

Grace 15.07.2011 13:11

Это моя (рабочая) реализация:

Response.Clear();
Response.ContentType = mimeType;
Response.AddHeader("Content-Disposition", String.Format("attachment; filename=\"{0} {1} Report for Week {2}.pdf\"", ddlClient.SelectedItem.Text, ddlCollectionsDirects.SelectedItem.Text, ddlWeek.SelectedValue));
Response.BinaryWrite(bytes);
Response.Flush();
Response.End();

mimeType похож на ваше приложение / zip (кроме PDF). Основными отличиями являются переданная дополнительная информация заголовка и вызов Flush для объекта Response.

Другие вопросы по теме