проблема загрузки большого файла большого двоичного объекта (600 МБ )

#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:

Мы решили проблему на стороне сервера. Они начали сохранять файл на сервере и отправлять его по ссылке, не загружая пользователя потоком.