Я хочу продвинуть файл к браузеру от веб-сайта с помощью веб-сервиса. Я в настоящее время читаю файл в base64 массив байтов и возвращаю это из веб-сервиса. Этот веб-сервис называют от веб-сайта, и я застреваю о том, как продвинуть это как исходный файл к браузеру. Идеально я хотел бы считать массив байтов в поток памяти и затем просто записать это в Ответный поток, если это возможно, таким образом, конечный пользователь просто загружает файл.
Во-первых, вместо того, чтобы отправлять массив байтов 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();
Нет необходимости отправлять дату вчерашнего дня в качестве дополнительного параметра. Вы уже можете получить его с помощью двух других методов:
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 может помочь вам найти правильный способ разобраться с этим.
Обычно встраивать файл в веб-службу - плохая идея. Вы только добавляете накладные расходы и сложность без реальной пользы.
Вместо этого вы должны предоставить IHttpHandler для обработки загрузки файла. Большинство веб-серверов также предоставляют вспомогательные API для упрощения этой задачи, например, в ASP.NET вы можете получить доступ к загруженному файлу с помощью:
HttpContext.Request.Files[0]
Существует множество сценариев загрузки файлов на javascript, которые упрощают эту задачу на клиенте: http://www.phpletter.com/Demo/AjaxFileUpload-Demo/
Это действительно зависит от интерфейса вашего веб-сервиса. Т.е. SOAP, REST, ASPX.
Вы можете попробовать изменить тип содержимого в своем ответе на «Application / octet-stream». Или что-то подобное, чтобы сообщить получателю тип MIME.
Если вы используете WCF rest, вы можете использовать Stream в качестве возвращаемого типа в веб-службе.