前言

IOS对FormData、File兼容性都不是很好,比如IOS8、9就不支持,但按市场的占比来说,可以忽略这部分,但能处理还是要处理的。

FormData

FormData主要是模拟表单数据,以便用XMLHttpRequest来发送数据,而FormData下有几个方法调用,如添加数据,设置数据,获取数据等,但它们有很一部分在IOS上是不兼容的,而append()这个方法一定是兼容的,其他API如果要使用就要留意他们的兼容性,如has、get都是不兼容的。

FormData添加进入的值不是blob、File,就会转换为String类型。

append第三个参数为文件名,不送第三个参数即为默认blob。

1
2
3
4
var content = '<a id="a"><b id="b">hey!</b></a>'; // 新文件的正文...
var blob = new Blob([content], { type: "text/xml"});

formData.append("webmasterfile", blob);

File

IOS8、9度无法兼容File,虽然这个版本的IOS用户已经很少了,但能兼容还是兼容一下。

一个Blob对象表示一个不可变的, 原始数据的类似文件对象。
File接口基于Blob,继承 blob功能并将其扩展为支持用户系统上的文件。
所以我们可以使用Blob替代File对象,只要在lastModifiedDate与name就和File对象差不多了,而且可以使用FileReader读取数据,因此在某些场景下是可以替换的。
而且上传到后台的时Blob与File是一样的,因为File继承于Blob。

1
2
3
4
5
6

function blobToFile(blob, fileName){
blob.lastModifiedDate =new Date();
blob.name = fileName;
return blob;
}