Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将blob转换为文件_Javascript - Fatal编程技术网

Javascript 将blob转换为文件

Javascript 将blob转换为文件,javascript,Javascript,我需要将blob转换为文件I javascript 我正在使用文件API var blob = new Blob(byteArrays, { type: contentType }); 这是从读取裁剪图像的函数返回的 旧的上传功能使用$files作为输入 我想将该blob转换为文件,然后在该对象中设置名称和类型。 我该怎么做???我像这样解决了文件问题: function base64ToFile(base64Data, tempfilename, contentType) {

我需要将blob转换为文件I javascript

我正在使用文件API

var blob = new Blob(byteArrays, { type: contentType });
这是从读取裁剪图像的函数返回的

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

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

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

    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;
}
函数base64ToFile(base64Data、tempfilename、contentType){
contentType=contentType | |“”;
var-sliceSize=1024;
var byteCharacters=atob(base64Data);
var bytesLength=byteCharacters.length;
var slicescont=Math.ceil(字节长度/切片大小);
var byteArray=新阵列(切片器);
对于(var sliceIndex=0;sliceIndex
下一个问题是angular file upload读取文件的格式

这很简单:

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。

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

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

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

private createFile(bytes: string, name: string): File {
    const file: File = <File>Object.assign(new Blob([bytes]), { lastModifiedDate: new Date(), name: name });
    return file;
  }
private-createFile(字节:字符串,名称:字符串):文件{
const file:file=Object.assign(新Blob([bytes]),{lastModifiedDate:new Date(),name:name});
返回文件;
}

如何设置该文件对象中类型和名称的值?我需要这样的内容:FilelastModified:1371548472000lastModifiedDate:2013年6月18日星期二11:41:12 GMT+0200(Rom,sommertid)name:“IMG_0221.JPG”size:68764type:“image/jpeg”webkitRelativePath:“proto:file这是否回答了您的问题?这个问题已经解决了。我在angular file upload中删除了$files,并将文件直接发送到服务器。很好用!谢谢<代码>新文件([blob],“upload_File.jpg”,{type:“image/jpeg”,lastModified:Date.now()})
行适用于方法在Edge和Safari mobilevar文件中不支持文件构造函数=新文件([blob],文件名,{type:contentType,lastModified:Date.now());无法使用typescript或Angular 5。按预期得到一个错误0参数,得到了3参数。@Nik我的测试在typescript中效果很好。您需要将您的typescript更新为新版本。这在typescript中不起作用:
Blob不可分配给type BlobPart
Yes它起作用了。我只是用这个Blob对象来代替File对象。注意:如果我没有设置Blob.name,只是按原样使用Blob对象,那么它就不起作用了。