环境
科尔多瓦8.1.1(cordova-lib@8.1.0)
Android 7.1.1
问题
当我们尝试从设备的本地文件系统中检索图像并通过xhr发送产生的File对象时,二进制数据不存在于POST主体中。 Cordova文件对象的有效载荷产生[object Object]
代码
项目复制问题:https://github.com/lightbeard/cvfileIssue
fetch("https://cdn.pixabay.com/photo/2017/07/10/23/43/question-mark-2492009_1280.jpg")
.then(response => response.blob())
.then(blob => {
// test 1
xhr(blob, 'http://example.com/process-jsfile');
// test 2
writeFile('test2.jpg', blob)
.then(_ => {
getFile('test2.jpg')
.then(file2 => {
xhr(file2, 'http://example.com/process-cvfile');
});
});
});
});
function xhr(data, url) {
const http = new XMLHttpRequest();
http.open('POST', url, false);
http.setRequestHeader('Content-type', 'img/jpeg');
http.send(data);
}
function writeFile(filename, blob) {
return new Promise(resolve => {
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, dataDir => {
dataDir.getFile(filename, {create:true, exclusive: false}, file => {
file.createWriter(fileWriter => {
fileWriter.onwriteend = resolve;
fileWriter.write(blob);
});
});
});
});
}
function getFile(filename) {
return new Promise(resolve => {
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, dataDir => {
dataDir.getFile(filename, {create: false}, fileEntry => {
fileEntry.file(resolve);
});
});
});
}
Test1结果(好的)
Test2结果(错误)