簡體   English   中英

將 blob 轉換為文件

[英]Convert blob to file

我需要將 blob 轉換為 javascript 文件。

我正在使用文件 API

var blob = new Blob(byteArrays, { type: contentType });

這是從讀取裁剪圖像的函數返回的。

舊的上傳功能使用 $files 作為輸入。

我想將該 blob 轉換為文件,然后在該對象中設置名稱和類型。 我該怎么做呢??

這很簡單:

var blob = new Blob(byteArrays, { type: contentType });
var file = new File([blob], filename, {type: contentType, lastModified: Date.now()});

要不就:

var file = new File([byteArrays], filename, {type: contentType, lastModified: Date.now()});

該代碼適用於 Chrome 和 Firefox,但不適用於 IE。

我解決了這樣的文件問題:

    function base64ToFile(base64Data, tempfilename, contentType) {
    contentType = contentType || '';
    var sliceSize = 1024;
    var byteCharacters = atob(base64Data);
    var bytesLength = byteCharacters.length;
    var slicesCount = Math.ceil(bytesLength / sliceSize);
    var byteArrays = new Array(slicesCount);

    for (var sliceIndex = 0; sliceIndex < slicesCount; ++sliceIndex) {
        var begin = sliceIndex * sliceSize;
        var end = Math.min(begin + sliceSize, bytesLength);

        var bytes = new Array(end - begin);
        for (var offset = begin, i = 0 ; offset < end; ++i, ++offset) {
            bytes[i] = byteCharacters[offset].charCodeAt(0);
        }
        byteArrays[sliceIndex] = new Uint8Array(bytes);
    }
    var file = new File(byteArrays, tempfilename, { type: contentType });
    return file;
}

下一個問題是 angular-file-upload 正在讀取文件的格式..

在 Edge 和 Safari 中,只需使用 blob 結構:

var blob = new Blob(byteArrays, { type: contentType });
blob.lastModifiedDate = new Date();
blob.name = name;

在 IE10 中沒有 File 構造函數,但您可以在打字稿中使用以下內容:

private createFile(bytes: string, name: string): File {
    const file: File = <File>Object.assign(new Blob([bytes]), { lastModifiedDate: new Date(), name: name });
    return file;
  }

https://stackoverflow.com/a/62227874/13081559

// here file_name will be name of that particular file 

let fileData =  function dataURLtoFile(base64, file_name) {
 var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
 bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
 while(n--){
 u8arr[n] = bstr.charCodeAt(n);
 }
return new File([u8arr], filename, {type:mime});
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM