我正在尝试在PhoneGap中保存blob - 但这是正常的File API。我通过XHR从我的服务器获取blob,它工作正常。 如果我创建一个img标签并将src设置为我的blob,则图像会显示在我的屏幕上。
我可以将blob保存到文件系统,但尝试打开它们会失败。只有.txt才能正常工作。我必须在任何地方设置数据类型吗?
我可以在此处找到我的下载和保存功能:http://pastebin.com/GrA2tRQt
简而言之,我做了一个fileWriter.write(this.response);
提前感谢您的任何帮助!
答案 0 :(得分:2)
我自己解决了。对于那些感兴趣的人来说,这是解决方案: 只需将responsetype设置为arraybuffer。
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) { // complete.
if (xhr.status >= 200 && xhr.status < 300) {
var data = this.response;
successCallback(data, fileName);
} else {
// response not successfull
var error = /<d:error/;
if (error.test(xhr.responseText)) {
console.log("ResponseText: " + xhr.responseText);
} else {
console.log("Kein ResponseText vorhanden");
}
}
}
};
xhr.open("GET", url, true);
xhr.responseType = 'arraybuffer';
xhr.setRequestHeader("Authorization", "Basic " + authToken);
xhr.send();
然后你可以将它保存在successCallback中,如下所示:
performSave = function (data, filename) {
console.log("perform Save");
console.log(data);
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fileSystem) {
fileSystem.root.getFile(filename, { create: true }, function (fileEntry) {
fileEntry.remove(
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = function (e) {
cloud.functions.performSaveSuccess();
};
fileWriter.onerror = function (e) {
cloud.functions.performSaveError(e);
};
fileWriter.write(data);
}, errorCallback));
}, errorCallback);
})
}
希望这有助于任何人