cordova - 将 BLOB 保存为 .txt 可以,但不适用于其他类型

标签 cordova xmlhttprequest blob fileapi

我正在尝试在 PhoneGap 中保存一个 blob - 但它是普通的文件 API。我通过 XHR 从我的服务器获取 blob,它工作正常。 如果我创建一个 img 标签并将 src 设置为我的 blob,图像就会显示在我的屏幕上。

我可以将 blob 保存到文件系统,但尝试打开它们失败。只有 .txt 可以正常工作。我必须在任何地方设置数据类型吗?

我的下载和保存功能可以在这里找到:http://pastebin.com/GrA2tRQt

简而言之,我做了一个 fileWriter.write(this.response);

感谢您提前提供的任何帮助!

最佳答案

我自己解决了。对于有兴趣的人来说,这是解决方案: 只需将响应类型设置为 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);
    })
}

希望这对任何人都有帮助

关于cordova - 将 BLOB 保存为 .txt 可以,但不适用于其他类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533319/

相关文章:

javascript - 使用 XMLHttpRequest 查看网页中的网页

java - Azure blob sasToken “Signature did not match” (java)

php - mysqli 图像 blob 插入不工作

Android native 应用程序与跨平台应用程序

javascript - 在 themeablebrowser Cordova/Phonegap 中获取页面标题

android - 从 webView/Cordova 创建位图

javascript - 二进制数据的部分 XHR 响应读取,可能吗?

iOS 启动画面图像未复制

javascript - 区 block 链 getjson javascript XMLHttpRequest

c - 如何使用 sqlite3 C API 插入多个 blob?