将blob转换为文件

时间:2014-12-18 18:48:28

标签: javascript

我需要将blob转换为文件i javascript。

我正在使用File API

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

这是从读取裁剪图像的函数返回。

旧的上传功能使用$ files作为输入。

我想将该blob转换为文件,然后在该对象中设置名称和类型。 我该怎么办?

4 个答案:

答案 0 :(得分:27)

很简单:

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。

答案 1 :(得分:10)

我解决了这样的文件问题:

    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正在读取文件的格式。

答案 2 :(得分:4)

在Edge和Safari中,只需使用blob结构:

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

答案 3 :(得分:0)

在IE10中没有文件构造函数,但是您可以在打字稿中使用以下内容:

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