#javascript #blob
#язык JavaScript #капля
Вопрос:
Когда файл загружается объемом более 600 МБ, он оказывается пустым. Серверная часть полностью выгружает файл. Используется Axios. Использованная библиотека downloadjs для загрузки. Я использовал много библиотек, которым нравится downloadjs, и результат был тот же. Как я могу реализовать загрузку большого файла с помощью Axios ?
ответ
{data: 'Id;Email;ClientDwhId;Number;16_int;22_datetime;22… headers: {…}, cancelTokenSource: {…}} cancelTokenSource: cancel: ƒ cancel(message) token: CancelToken promise: Promise [[Prototype]]: Promise [[PromiseState]]: "pending" [[PromiseResult]]: undefined [[Prototype]]: Object [[Prototype]]: Object data: "Id;Email;ClientDwhId;Number;16_int;22_datetime;2 headers: content-disposition: "attachment; filename=File.csv; filename*=UTF-8''File.csv" content-length: "42277" content-type: "text/csv" [[Prototype]]: Object [[Prototype]]: Object
import * as contentDisposition from 'content-disposition'; import * as downloadjs from 'downloadjs'; import { Observable } from 'rxjs'; import { tap } from 'rxjs/operators'; import { ApiResponse } from '../api'; const defaultContentType = 'text/plain'; const defaultFilename = 'file.txt'; const downloadFile = (response: ApiResponselt;BlobPartgt;, filename?: string) =gt; { //create filename if (!filename) { const parsedContentDisposition = response.headers['content-disposition'] amp;amp; contentDisposition.parse(response.headers['content-disposition']); filename = parsedContentDisposition amp;amp; parsedContentDisposition.parameters ? parsedContentDisposition.parameters.filename : defaultFilename; } //create content type const contentType = response.headers['content-type'] ? response.headers['content-type'] : defaultContentType; //function from downloadjs library downloadjs( new Blob([response.data]), filename, contentType,); }; export const downloadFileFromStream = (filename?: string) =gt; ( stream$: Observablelt;ApiResponselt;BlobPartgt;gt;, ) =gt; stream$.pipe(tap(response =gt; downloadFile(response, filename))); //run downloadFile function after response
Комментарии:
1. Похоже, вы набираете максимальную длину строки V8, работа с фрагментами может помочь.
Ответ №1:
Мы решили проблему на стороне сервера. Они начали сохранять файл на сервере и отправлять его по ссылке, не загружая пользователя потоком.