source

JavaScript에서 Blob을 파일로 변환하는 방법

manycodes 2022. 10. 27. 23:05
반응형

JavaScript에서 Blob을 파일로 변환하는 방법

이미지를 노드에 업로드해야 합니다.JS 서버를 일부 디렉토리에 연결합니다.사용하고 있다connect-busboynode module을 클릭합니다.

저는...dataURL다음 코드를 사용하여 BLOB로 변환한 이미지의 경우:

dataURLToBlob: function(dataURL) {
    var BASE64_MARKER = ';base64,';
    if (dataURL.indexOf(BASE64_MARKER) == -1) {
        var parts = dataURL.split(',');
        var contentType = parts[0].split(':')[1];
        var raw = decodeURIComponent(parts[1]);
        return new Blob([raw], {type: contentType});
    }
    var parts = dataURL.split(BASE64_MARKER);
    var contentType = parts[0].split(':')[1];
    var raw = window.atob(parts[1]);
    var rawLength = raw.length;
    var uInt8Array = new Uint8Array(rawLength);
    for (var i = 0; i < rawLength; ++i) {
        uInt8Array[i] = raw.charCodeAt(i);
    }
    return new Blob([uInt8Array], {type: contentType});
}

이미지를 업로드하기 위해 BLOB를 파일로 변환하는 방법이 필요합니다.

누가 나 좀 도와줄래?

파일 생성자를 사용할 수 있습니다.

var file = new File([myBlob], "name");

w3 사양에 따라 BLOB에 포함된 바이트를 새로운 File 객체의 바이트에 추가하여 지정된 이름의 http://www.w3.org/TR/FileAPI/#dfn-file 파일을 만듭니다.

이 함수는 a를 변환합니다.BlobFile저한테는 잘 먹혀요.

Vanilla JavaScript

function blobToFile(theBlob, fileName){
    //A Blob() is almost a File() - it's just missing the two properties below which we will add
    theBlob.lastModifiedDate = new Date();
    theBlob.name = fileName;
    return theBlob;
}

TypeScript (적절한 타이핑이 있는 경우

public blobToFile = (theBlob: Blob, fileName:string): File => {
    var b: any = theBlob;
    //A Blob() is almost a File() - it's just missing the two properties below which we will add
    b.lastModifiedDate = new Date();
    b.name = fileName;

    //Cast to a File() type
    return <File>theBlob;
}

사용.

var myBlob = new Blob();

//do stuff here to give the blob some data...

var myFile = blobToFile(myBlob, "my-image.png");

Joshua P Nixon의 답변은 맞지만 저는 마지막 수정 날짜도 정해야 했습니다.여기 암호가 있습니다.

var file = new File([blob], "file_name", {lastModified: 1534584790000});

1534584790000은 "GMT: 2018년 8월 18일 토요일 9:33:10 AM"의 Unix 타임스탬프입니다.

타이프 스크립트

public blobToFile = (theBlob: Blob, fileName:string): File => {       
    return new File(
        [theBlob as any], // cast as any
        fileName, 
        {
            lastModified: new Date().getTime(),
            type: theBlob.type 
        }
    )
}

자바스크립트

function blobToFile(theBlob, fileName){       
    return new File([theBlob], fileName, { lastModified: new Date().getTime(), type: theBlob.type })
}

산출량

스크린샷

File {name: "fileName", lastModified: 1597081051454, lastModifiedDate: Mon Aug 10 2020 19:37:31 GMT+0200 (Eastern European Standard Time), webkitRelativePath: "", size: 601887, …}
lastModified: 1597081051454
lastModifiedDate: Mon Aug 10 2020 19:37:31 GMT+0200 (Eastern European Standard Time) {}
name: "fileName"
size: 601887
type: "image/png"
webkitRelativePath: ""
__proto__: File

작업하기 위해서는 BLOB에 포함되어 있는 타입을 명시적으로 제공해야 합니다.

const file = new File([blob], 'untitled', { type: blob.type })

의 현대적 변종:

function blob2file(blobData) {
  const fd = new FormData();
  fd.set('a', blobData);
  return fd.get('a');
}

이 문제는 몇 시간 동안 나를 괴롭혔다.Nextjs를 사용하여 캔버스를 이미지 파일로 변환하려고 했습니다.

다른 사람의 솔루션을 사용했지만 생성된 파일이 비어 있었습니다.

따라서 이것이 문제라면 파일 객체의 크기 속성을 언급해야 합니다.

new File([Blob], `my_image${new Date()}.jpeg`, {
  type: "image/jpeg",
  lastModified: new Date(),
  size: 2,
});

중요하지 않은 가치를 키만 더하면 됩니다.

사용한 적이 있다FileSaver.js파일로 저장합니다.

레포는 https://github.com/eligrey/FileSaver.js/ 입니다.

사용방법:

import { saveAs } from 'file-saver';

var blob = new Blob(["Hello, world!"], {type: "text/plain;charset=utf-8"});
saveAs(blob, "hello world.txt");

saveAs("https://httpbin.org/image", "image.jpg");

언급URL : https://stackoverflow.com/questions/27159179/how-to-convert-blob-to-file-in-javascript

반응형