Загрузите файл с веб-сервиса - в сайте ASP.NET

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

10
задан John Saunders 10 February 2010 в 19:25
поделиться

4 ответа

Во-первых, вместо того, чтобы отправлять массив байтов base64, пусть ваша веб-служба просто возвращает массив байтов для вашего файла. Response.OutputStream.Write () автоматически base64 закодирует ваши байты, так что вы также можете не закодировать их в потоке памяти.

Во-вторых, вам понадобится больше, чем просто байты. Вам понадобятся метаданные, связанные с файлом. Для приведенного ниже фрагмента я поместил все эти метаданные в отдельный класс (локальный экземпляр с именем «file»). Затем просто используйте этот фрагмент, когда у вас будут необходимые данные:

Response.Clear();
Response.ClearHeaders();
Response.ContentType = file.ContentType;
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.FileName + "\"");
Response.AddHeader("Content-Length", file.FileSize.ToString());
Response.OutputStream.Write(file.Bytes, 0, file.Bytes.Length);
Response.Flush();
Response.End();
13
ответ дан 3 December 2019 в 21:21
поделиться

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

  1. встроенные функции Perl time (), localtime () или gmtime () дадут вам текущую дату и время, и вы можете работать с этим, чтобы определить вчерашнюю дату.
  2. Он уже включен в имя файла журнала, поэтому можно проанализировать имя файла, чтобы получить дату в нужном формате.

Perl имеет много модулей для работы с датами и временем, в зависимости от того, что вам нужно сделать.

-121--3450566-

Я начал работать над инструментом под названием git-tfs, похожим в некоторых отношениях на git-svn.

https://github.com/git-tfs/git-tfs

-121--978116-

Возможно, вам нужно будет явно установить ContentType в качестве параметра, например:

Response.ContentType = "image/jpeg";
Response.OutputStream.Write(buffer, 0, buffer.Length);

Если вы хотите управлять именем файла, вам придется добавить заголовок Content-Disposition. Google может помочь вам найти правильный способ разобраться с этим.

3
ответ дан 3 December 2019 в 21:21
поделиться

Обычно встраивать файл в веб-службу - плохая идея. Вы только добавляете накладные расходы и сложность без реальной пользы.

Вместо этого вы должны предоставить IHttpHandler для обработки загрузки файла. Большинство веб-серверов также предоставляют вспомогательные API для упрощения этой задачи, например, в ASP.NET вы можете получить доступ к загруженному файлу с помощью:

HttpContext.Request.Files[0]

Существует множество сценариев загрузки файлов на javascript, которые упрощают эту задачу на клиенте: http://www.phpletter.com/Demo/AjaxFileUpload-Demo/

1
ответ дан 3 December 2019 в 21:21
поделиться

Это действительно зависит от интерфейса вашего веб-сервиса. Т.е. SOAP, REST, ASPX.

Вы можете попробовать изменить тип содержимого в своем ответе на «Application / octet-stream». Или что-то подобное, чтобы сообщить получателю тип MIME.

Если вы используете WCF rest, вы можете использовать Stream в качестве возвращаемого типа в веб-службе.

0
ответ дан 3 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

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