JS 의 이 진 가족 에 대해 서 말씀 드 리 겠 습 니 다.
9097 단어 JS2 진법BlobArrayBufferBuffer
Blob:파일 작업 을 지원 하 는 바 이 너 리 대상
Array Buffer:전단 에 있 는 일반적인 바 이 너 리 버퍼 는 배열 과 유사 하지만 API 와 특성 에 있어 서 는 많이 다 릅 니 다.
Buffer:Node.js 가 제공 하 는 바 이 너 리 버퍼 는 I/O 작업 을 처리 하 는 데 자주 사 용 됩 니 다.
Blob
먼저 Blob 를 소개 하 겠 습 니 다.Blob 는 파일 작업 을 지원 하 는 데 사 용 됩 니 다.쉽게 말 하면 JS 에는 두 개의 구조 함수 File 과 Blob 가 있 고 File 은 모든 Blob 의 속성 을 계승 했다.
그래서 우리 가 보기에 File 대상 은 특수 한 Blob 대상 으로 볼 수 있다.
전단 공사 에서 우 리 는 어떤 조작 에서 File 대상 을 얻 을 수 있 습 니까?보 세 요:
(비고:현재 File API 규범 상 태 는 Working Draft)
위 에서 말 했 듯 이 File 대상 은 특수 한 Blob 대상 이 므 로 자 연 스 럽 게 Blob 대상 을 직접 호출 할 수 있 는 방법 입 니 다.Blob 가 구체 적 으로 어떤 방법 을 가지 고 있 는 지,그리고 그것 으로 어떤 기능 을 실현 할 수 있 는 지 살 펴 보 자.
Blob 실전
window.URL.createObjectURL 방법 을 통 해 하나의 blob 를 Blob URL 로 바 꾸 고 파일 다운로드 나 그림 으로 표시 하 는 링크 를 사용 할 수 있 습 니 다.
Blob URL 이 구현 하 는 다운로드 나 디 스 플레이 등 기능 은 하나의 브 라 우 저 내부 에서 만 수행 할 수 있 습 니 다.서버 에 저장 할 수 없 거나 서버 에 저장 할 의미 가 없다.
다음은 Blob 의 예 입 니 다.짧 은 것 을 볼 수 있 습 니 다.
blob:d3958f5c-0777-0845-9dcf-2cb28783acaf
지루 한 Base 64 형식의 Data URL 에 비해 Blob URL 의 길 이 는 충분 한 정 보 를 저장 할 수 없 음 이 분명 하 다.이것 은 브 라 우 저 내부 의'참조'와 유사 하 다 는 것 을 의미한다.이런 측면 에서 볼 때 Blob URL 은 브 라 우 저가 자체 적 으로 제정 한 위조 프로 토 콜 이다.
Blob 다운로드 파일
우 리 는 window.URL.createObjectURL 을 통 해 Blob(File)대상 을 받 아 Blob URL 로 바 꾼 다음 a.다운 로드 속성 을 부여 한 다음 페이지 에서 이 링크 를 클릭 하면 다운로드 가 가능 합 니 다.
<!-- html -->
<a id="h"> </a>
<!-- js -->
<script>
var blob = new Blob(["Hello World"]);
var url = window.URL.createObjectURL(blob);
var a = document.getElementById("h");
a.download = "helloworld.txt";
a.href = url;
</script>
비고:download 속성 이 IE 와 호 환 되 지 않 습 니 다.IE 는 window.navigator.msSaveBlob 방법 또는 기타 로 최적화 할 수 있 습 니 다(IE 10/11)실행 결과
Blob 그림 로 컬 디 스 플레이
window.URL.createObject URL 에서 생 성 된 Blob URL 은 img.src 에 부여 하여 그림 을 표시 할 수 있 습 니 다.
<!-- html -->
<input type="file" id='f' />
<img id='img' style="width: 200px;height:200px;" />
<!-- js -->
<script>
document.getElementById('f').addEventListener('change', function (e) {
var file = this.files[0];
const img = document.getElementById('img');
const url = window.URL.createObjectURL(file);
img.src = url;
img.onload = function () {
// URL.createObjectURL URL
window.URL.revokeObjectURL(url);
}
}, false);
</script>
실행 결과Blob 파일 분할 업로드
Blob.slice(start,end)를 통 해 큰 Blob 를 여러 개의 작은 Blob 로 나 눌 수 있 습 니 다xhr.send 는 Blob 대상 을 직접 보 낼 수 있 는전단
<!-- html -->
<input type="file" id='f' />
<!-- js -->
<script>
function upload(blob) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/ajax', true);
xhr.setRequestHeader('Content-Type', 'text/plain')
xhr.send(blob);
}
document.getElementById('f').addEventListener('change', function (e) {
var blob = this.files[0];
const CHUNK_SIZE = 20; .
const SIZE = blob.size;
var start = 0;
var end = CHUNK_SIZE;
while (start < SIZE) {
upload(blob.slice(start, end));
start = end;
end = start + CHUNK_SIZE;
}
}, false);
</script>
노드 엔 드
app.use(async (ctx, next) => {
await next();
if (ctx.path === '/ajax') {
const req = ctx.req;
const body = await parse(req);
ctx.status = 200;
console.log(body);
console.log('---------------');
}
});
파일 내용According to the Zhanjiang commerce bureau, the actual amount of foreign capital utilized in Zhanjiang from January to October this year was
실행 결과
로 컬 읽 기 파일 내용
Blob 또는 파일 대상 을 읽 고 다른 형식의 데이터 로 전환 하려 면 FileReader 대상 의 API 를 통 해 작업 할 수 있 습 니 다.
<input type="file" id='f' />
document.getElementById('f').addEventListener('change', function (e) {
var file = this.files[0];
const reader = new FileReader();
reader.onload = function () {
const content = reader.result;
console.log(content);
}
reader.readAsText(file);
}, false);
실행 결과위 에서 Blob 의 용법 을 소 개 했 습 니 다.Blob 는 파일 을 대상 으로 하거나 파일 대상 이 라 고 할 수 있 습 니 다.또한 Blob 는 바 이 너 리 데이터 에 대한 세부 적 인 조작 능력 이 부족 하 다 는 것 을 알 게 되 었 습 니 다.예 를 들 어 특정한 부분의 바 이 너 리 수 거 를 구체 적 으로 수정 하려 면 Blob 는 분명히 부족 합 니 다.이런 입자 도 기능 은 아래 에 소 개 된 Array Buffer 로 완성 할 수 있다.
ArrayBuffer
Array Buffer 의 대체 적 인 기능 을 한 장의 그림 으로 보 여 주세요.
또한 Array Buffer 는 JS 의 원생 배열 과 큰 차이 가 있다 는 것 을 설명 한다.그림 과 같다.
디 테 일 하 게 소개 해 드 리 겠 습 니 다.
Array Buffer 형식 으로 로 컬 데 이 터 를 읽 습 니 다.
document.getElementById('f').addEventListener('change', function (e) {
const file = this.files[0];
const fileReader = new FileReader();
fileReader.onload = function () {
const result = fileReader.result;
console.log(result)
}
fileReader.readAsArrayBuffer(file);
}, false);
실행 결과Array Buffer 형식 으로 Ajax 요청 데 이 터 를 읽 습 니 다.
xhr.responseType="arraybuffer"를 통 해 응답 하 는 데이터 형식 을 지정 합 니 다.
onload 리 셋 에 xhr.response 인쇄
전단
const xhr = new XMLHttpRequest();
xhr.open("GET", "ajax", true);
xhr.responseType = "arraybuffer";
xhr.onload = function () {
console.log(xhr.response)
}
xhr.send();
노드 엔 드
const app = new Koa();
app.use(async (ctx) => {
if (pathname = '/ajax') {
ctx.body = 'hello world';
ctx.status = 200;
}
}).listen(3000)
실행 결과TypeArray 를 통 해 Array Buffer 에 대해 쓰기 동작 을 진행 합 니 다.
const typedArray1 = new Int8Array(8);
typedArray1[0] = 32;
const typedArray2 = new Int8Array(typedArray1);
typedArray2[1] = 42;
console.log(typedArray1);
// output: Int8Array [32, 0, 0, 0, 0, 0, 0, 0]
console.log(typedArray2);
// output: Int8Array [32, 42, 0, 0, 0, 0, 0, 0]
DataView 를 통 해 Array Buffer 에 대한 쓰기 작업
const buffer = new ArrayBuffer(16);
const view = new DataView(buffer);
view.setInt8(2, 42);
console.log(view.getInt8(2));
// : 42
BufferBuffer 는 Node.js 가 제공 하 는 대상 으로 전단 에 없습니다.이 는 일반적으로 IO 작업 에 사 용 됩 니 다.예 를 들 어 전단 요청 데 이 터 를 받 을 때 아래 의 Buffer API 를 통 해 받 은 전단 데 이 터 를 통합 할 수 있 습 니 다.
버퍼 실전
예 는 다음 과 같다.
노드 엔 드(Koa)
const app = new Koa();
app.use(async (ctx, next) => {
if (ctx.path === '/ajax') {
const chunks = [];
const req = ctx.req;
req.on('data', buf => {
chunks.push(buf);
})
req.on('end', () => {
let buffer = Buffer.concat(chunks);
console.log(buffer.toString())
})
}
});
app.listen(3000)
전단
const xhr = new XMLHttpRequest();
xhr.open("POST", "ajax", true);
xhr.setRequestHeader('Content-Type', 'text/plain')
xhr.send("asdasdsadfsdfsadasdas");
실행 결과노드 엔 드 출력
asdasdsadfsdfsadasdas
이상 은 JS 의 바 이 너 리 가족 에 대한 상세 한 내용 입 니 다.JS 의 바 이 너 리 가족 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JS 판단 수조 네 가지 실현 방법 상세그러면 본고는 주로 몇 가지 판단 방식과 방식 판단의 원리를 바탕으로 문제가 있는지 토론하고자 한다. 예를 들어 html에 여러 개의 iframe 대상이 있으면 instanceof의 검증 결과가 기대에 부합되지 않을...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.