Programing

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

lottogame 2020. 10. 11. 09:04
반응형

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


NodeJS 서버의 일부 디렉토리에 이미지를 업로드해야합니다. 이를 connect-busboy위해 노드 모듈을 사용하고 있습니다.

나는 있었다 dataURL나는 다음과 같은 코드를 사용하여 블롭로 변환하는 이미지를 :

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을 파일로 변환하는 방법이 필요합니다.

누군가 나를 도울 수 있습니까?


이 함수는 a Blob를 a 로 변환하고 File저에게 잘 작동합니다.

바닐라 자바 ​​스크립트

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");

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

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

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


Joshua P Nixon 의 대답은 정확하지만 마지막 수정 날짜도 설정해야했습니다. 그래서 여기에 코드가 있습니다.

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

1,534,584,790,000는 "의 유닉스 타임 스탬프입니다 : 2018년 8월 18일 (토요일) 그리니치 표준시 오전 9시 33분 10초 "


현대 변형 :

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

FileSaver.js github 프로젝트 saveAs에서 사용하십시오 .

FileSaver.jssaveAs()기본적으로 지원하지 않는 브라우저 에서 FileSaver 인터페이스를 구현합니다 .

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

반응형