Возврат файла WebAPI и загрузка не запускаются

Имея очень странную проблему, когда я возвращаю файл как «HttpResponseMessage», он работает, когда iam возвращает файл pdf, но когда я возвращаю файл xls (файл excel), это не так.

Вот заголовки ответов, я попытался изменить тип контента на "application / vnd.ms-excel"

HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 316928 Content-Type: application/octet-stream Content-Encoding: UTF-8 Expires: -1 Server: Microsoft-IIS/8.0 Content-Disposition: attachment; filename=f.xls Content-Description: File transfer Charset: UTF-8 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XHRmc1xrYmFzcnZcZUdhaW4uV2Vic2l0ZXMuRm9yZWNhc3RpbmdcYXBpXFByaW50XENhbGxpbmdMaXN0QnlDb21wYW55T3JDdXNvdG1lcklk?= X-Powered-By: ASP.NET Date: Fri, 06 Dec 2013 07:49:47 GMT 

результат iam get выглядит, когда вы открываете файл xls в блокноте.

i foudn очень странное решение, которое должно было преобразовать его в base64 и сделать ссылку на «data: application / octet-stream; base64», и это начнет загрузку, вы не знаете имя файла, чтобы пользователь не понять, как сохранить файл XLS …

теперь я снова вернусь к результату, который не начнет загружать … любые предложения?


Вот ответ Raw от fiddler2

 HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 316928 Content-Type: application/octet-stream Expires: -1 Server: Microsoft-IIS/8.0 Set-Cookie: path=/; HttpOnly Content-Disposition: attachment; filename=f.xls Content-Description: File transfer Charset: UTF-8 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XHRmc1xrYmFzcnZcZUdhaW4uV2Vic2l0ZXMuRm9yZWNhc3RpbmdcYXBpXFByaW50XENhbGxpbmdMaXN0QnlDb21wYW55T3JDdXNvdG1lcklk?= X-Powered-By: ASP.NET Date: Fri, 06 Dec 2013 08:40:51 GMT   ࡱ                 >                    d                         e  f  g  h  i                                     *** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. ***  HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 316928 Content-Type: application/octet-stream Expires: -1 Server: Microsoft-IIS/8.0 Set-Cookie: path=/; HttpOnly Content-Disposition: attachment; filename=f.xls Content-Description: File transfer Charset: UTF-8 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XHRmc1xrYmFzcnZcZUdhaW4uV2Vic2l0ZXMuRm9yZWNhc3RpbmdcYXBpXFByaW50XENhbGxpbmdMaXN0QnlDb21wYW55T3JDdXNvdG1lcklk?= X-Powered-By: ASP.NET Date: Fri, 06 Dec 2013 08:40:51 GMT   ࡱ                 >                    d                         e  f  g  h  i                                     *** FIDDLER: RawDisplay truncated at 128 characters. Right-click to disable truncation. *** 

ОБНОВИТЬ

Iam вызывает функцию WEBAPI с запросом на отправку, и я сравниваю его со старым результатом ответа, и они почти одинаковы.

iam, размещающий респос из обоих запросов здесь.

из старого метода загрузка начинается …

 HTTP/1.1 200 OK Cache-Control: private Content-Type: application/vnd.ms-excel; charset=utf-8 Server: Microsoft-IIS/8.0 Content-Disposition: attachment; filename=CallList_2013-12-06.xls X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XHRmc1xrYmFzcnZcZUdhaW4uV2Vic2l0ZXMuRm9yZWNhc3RpbmdcZUNSTVxDYWxsTGlzdEV4cG9ydC5hc3B4?= X-Powered-By: ASP.NET Date: Fri, 06 Dec 2013 10:11:13 GMT Content-Length: 34590 

из нового метода загрузите начало дозирования.

 HTTP/1.1 200 OK Cache-Control: no-cache Pragma: no-cache Content-Length: 316928 Content-Type: application/vnd.ms-excel; charset=utf-8 Content-Encoding: UTF-8 Expires: -1 Server: Microsoft-IIS/8.0 Content-Disposition: attachment; filename=CallList_2013-12-06.xls; charset=utf-8 Charset: UTF-8 X-AspNet-Version: 4.0.30319 X-SourceFiles: =?UTF-8?B?QzpcZGV2XHRmc1xrYmFzcnZcZUdhaW4uV2Vic2l0ZXMuRm9yZWNhc3RpbmdcYXBpXFByaW50XENhbGxpbmdMaXN0QnlDb21wYW55T3JDdXNvdG1lcklk?= X-Powered-By: ASP.NET Date: Fri, 06 Dec 2013 11:04:49 GMT 

UPDATE добавлен метод, в котором я возвращаю результат, класс ByteResult содержит только байты [], contentLength, contentType и filename

  protected HttpResponseMessage ByteResult(ByteResult result) { try { var responseStream = new MemoryStream(); var buffer = result.Data; responseStream.Write(buffer, 0, Convert.ToInt32(result.ContentLenght)); // No Range header. Return the complete file. responseStream.Position = 0; var response = new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StreamContent(responseStream) }; response.Content.Headers.Add("Content-Disposition", "attchment; filename=" + HttpUtility.UrlEncode(result.Name, Encoding.UTF8)); response.Content.Headers.Add("Content-Type", result.ContentType ); response.Content.Headers.Add("Content-Description", "File Download"); response.Content.Headers.Add("Content-Encoding", "UTF-8"); response.Content.Headers.Add("Charset", "UTF-8"); response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now); return response; } catch (IOException ioex) { return ErrorResult(ioex, "Unknown IO Error", HttpStatusCode.InternalServerError); } catch (Exception ex) { return ErrorResult(ex, "Unknown Error", HttpStatusCode.InternalServerError); } } 

Я бы попытался дважды проверить сопоставления типа MIME на клиенте, в который загружается файл excel.

Кроме того, если вы измените тип контента в ответе на приложение / октет-поток, клиент должен просто спросить, хотите ли вы сохранить файл – если сохраненный файл затем поврежден, посмотрите дальше на кодировку файла.

Также посмотрите в Fiddler, чтобы убедиться, что ответ завершен правильно, я ранее видел файлы, отправленные правильно, но затем другие сообщения, помеченные в конце потока ответов из-за ошибок сервера – в моем случае, потому что вид не существовал, когда используя Monorail – таким образом, мы закончили с электронной таблицей Excel с последующим 500 текстом ошибки.

НТН,

Ник

Interesting Posts

Есть ли ограничение на длину строки с помощью VBA?

Приглашение на встречу из Excel макроса – нет органа, назначенного на прием

xlwings и sqlalchemy при использовании Excel с Visual Basic

Фильтровать символы с функцией

Office (Excel) COM-взаимодействие на Mac OSX с использованием .NET Core?

Как внести изменения в элементы ленты одного экземпляра excel, используя надстройку уровня приложения?

VBA Excel Выполнить код, несмотря на пользовательское окно, а затем остановить нажатие кнопки

Модуль python3 для импорта файлов xls

vba: ловить файл не найденное исключение с DIR

Добавление файла .txt, который в формате csv как лист существующей книги в C #

Проверьте, не была ли ячейка пустой Excel VBA

IsNumeric / IsError возвращает ошибку

Простой выбор кода VBA код не работает

Извлеките данные JSON в ячейку a1, в b1, c1, d1 и т. Д. – Excel

Все столбцы excelsheet не установлены на одной странице pdf; при конвертации с использованием Excel VBA

Давайте будем гением компьютера.