source

JavaScript 최대 Blob 크기에 제한이 있습니까?

manysource 2023. 2. 22. 22:38

JavaScript 최대 Blob 크기에 제한이 있습니까?

AJAX 콜을 사용하여 파일을 다운로드하려고 합니다.클라이언트에서 헤더를 보내야 하는 것과 함께 포스트 요청을 해야 하기 때문에 AJAX 콜을 사용해야 합니다.서버 API는 우리 통제하에 있지 않기 때문에 AJAX를 사용하는 것 외에는 선택의 여지가 없습니다.파일 저장 대화상자를 표시하기 위해 아래와 같이 바이트 배열을 blob으로 변환합니다.

var oReq = new XMLHttpRequest();
oReq.open("POST","api/operations/zip", true);
oReq.responseType = "arraybuffer";
oReq.onload = function(oEvent) { 
   var blob=new Blob([oReq.response], {type: 'application/octet-binary'}); 
   var link=document.createElement('a'); 
   link.href=window.URL.createObjectURL(blob); 
   link.download="myFileName.zip"; link.click();  
}
oReq.send(filePaths);

이제 브라우저 메모리의 제약 이외에 자바스크립트에서 사용할 수 있는 Blob 사이즈에 제한이 있는지 알고 싶습니다.RAM이 8GB 정도 있으면 4GB 파일을 다운로드 할 수 있습니다.

기존의 답변은 대부분 시대에 뒤떨어진 것으로 보인다.


Chrome(57+표시):

Chrome의 Blob 스토리지 시스템 설계에 따르면:

BLOB 저장소 제한

여기에서는 스토리지 제한을 계산합니다.

인메모리 스토리지 제한

  • 아키텍처가 크롬이 아닌 x64인 경우OS 또는 Android:2GB
  • 그렇지 않은 경우: total_physical_memory / 5

디스크 저장소 제한

  • 크롬의 경우OS:disk_size / 2
  • Android의 경우:disk_size / 20
  • 기타:disk_size / 10

주의: 크롬OS의 디스크는 시스템 파티션과는 다른 사용자 파티션의 일부입니다.

최소 디스크 가용성

최소한의 디스크 가용성을 확보하기 위해 디스크 제한을 제한합니다.델은 다음과 같은 방정식을 사용합니다.

min_disk_availability = in_memory_limit * 2

제한 예시

(모든 사이즈는 GB)

Device          | Ram | In-Memory Limit | Disk | Disk Limit | Min Disk Availability
----------------+-----+-----------------+------+------------+----------------------
Cast            | 0.5 | 0.1             | 0    | 0          | 0
Android Minimal | 0.5 | 0.1             | 8    | 0.4        | 0.2
Android Fat     | 2   | 0.4             | 32   | 1.5        | 0.8
CrOS            | 2   | 0.4             | 8    | 4          | 0.8
Desktop 32      | 3   | 0.6             | 500  | 50         | 1.2
Desktop 64      | 4   | 2               | 500  | 50         | 4

명확히 하자면,disk_size는 사용 가능한 디스크 영역이 아닌 총 디스크 크기입니다(개인 정보 보호를 위해 필요하지만 사용 가능한 디스크 공간을 모두 사용할 수 있습니다).

Chrome은 다음과 같은 디렉토리를 사용합니다.blob_storage크롬 프로파일 디렉토리에서 BLOB 부품을 디스크에 저장합니다.

사용 가능한 디스크 용량 또는 사용 가능한 RAM이 소프트웨어 제한보다 작을 경우 다른 제한이 적용되는지 또는 적용되는지 알 수 없습니다.자세한 내용을 알게 되면 이 답변을 업데이트하겠습니다.


오페라(44+또는 그 이전):

크롬을 베이스로 하고 있기 때문에 크롬과 같습니다.


Firefox(53+ 또는 그 이전):

명확한 하드 제한은 없습니다."800 MiB" FileSaver.js보다 훨씬 큰 Blob을 만들 수 있습니다.디스크 공간을 사용하여 더 큰 블럽을 백업하지 않기 때문에 모든 것이 메모리에 저장되며 운영 체제가 메모리를 디스크로 페이징할 수 있습니다.즉, 퍼포먼스가 저하될 수 있지만 메모리보다 큰 블럽이 발생할 수 있습니다.


Safari (10.1 이상):

명확한 하드 제한은 없습니다.디스크 공간을 사용하여 더 큰 블럽을 백업하지 않기 때문에 모든 것이 메모리에 저장되며 운영 체제가 메모리를 디스크로 페이징할 수 있습니다.즉, 퍼포먼스가 저하될 수 있지만 메모리보다 큰 블럽이 발생할 수 있습니다.


다른 브라우저 제한은 학습하면서 추가될 것입니다.

블록은 Chrome에서 500MiB로 제한되며 현재 메모리에 저장되지만 재설계가 진행 중입니다.

https://code.google.com/p/chromium/issues/detail?id=375297

다른 브라우저 구현에는 다음과 같은 제한이 약간 다릅니다.

https://github.com/eligrey/FileSaver.js/#supported-displays

언급URL : https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size