gpt4 book ai didi

ios - 在 iOS 上的 Cordova 中保存文件不起作用 - 在 Android 中正常

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:53 33 4
gpt4 key购买 nike

我有一个 cordova 应用程序,我正在下载一个 pdf 文件,将其保存在本地然后打开它。它在 Android 中运行良好,但 iOS 在输出窗口中给出一条消息,它已写入文件但无法打开 null 文件。

最初我使用的是 cordova.file.externalRootDirectory,它适用于 Android 但不适用于 iOS。我将其更改为 cordova.file.dataDirectory,它再次在 Android 但不是 iOS 中工作。

根据我所做的搜索,使用 cordova.file.dataDirectory 应该可以在两个平台上工作。

我试过添加

到配置文件,但这没有区别。

var contentType = "application/pdf";
var folderpath = cordova.file.dataDirectory;
var filename = filedate + ".pdf";

savebase64AsPDF(folderpath,filename,data,contentType)


function b64toBlob(b64Data, contentType, sliceSize) {
contentType = contentType || '';
sliceSize = sliceSize || 512;

var byteCharacters = atob(b64Data);
var byteArrays = [];

for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
var slice = byteCharacters.slice(offset, offset + sliceSize);

var byteNumbers = new Array(slice.length);
for (var i = 0; i < slice.length; i++) {
byteNumbers[i] = slice.charCodeAt(i);
}

var byteArray = new Uint8Array(byteNumbers);

byteArrays.push(byteArray);
}

var blob = new Blob(byteArrays, {type: contentType});
return blob;
}

function savebase64AsPDF(folderpath,filename,content,contentType){
// Convert the base64 string in a Blob
var DataBlob = b64toBlob(content,contentType);

console.log("Starting to write the file :3");

window.resolveLocalFileSystemURL(folderpath, function(dir) {
console.log("Access to the directory granted succesfully");
dir.getFile(filename, {create:true}, function(file) {
console.log("File created succesfully.");
file.createWriter(function(fileWriter) {
console.log("Writing content to file");
fileWriter.write(DataBlob);
console.log("Finished writing file.");
//open file
cordova.plugins.fileOpener2.open(folderpath + filename, 'application/pdf');
}, function(){
alert('Unable to save file in path '+ folderpath);
});
});
});
}

预期(和期望)的结果是在 Android 上发生的情况,文件保存在本地,然后在默认的 pdf 阅读器中打开。

我能从 iOS 得到的最好结果是 xcode 的输出窗口中的一条消息说它有“完成写入文件”,然后另一行说明“在 (null) 寻找文件”

没有异常或错误,什么都没有。

如有任何帮助,我们将不胜感激。

最佳答案

插件 fileOpener2 有一个 known issue with spaces in the filename for iOS .你可以reportedly use decodeURIComponent 显示受此影响的文件,例如,在这种情况下:

var docUrl = folderpath + filename;

if ( device.platform.toLowerCase() === 'ios' ) { // only change for iOS
docUrl = decodeURIComponent( docUrl );
}

cordova.plugins.fileOpener2.open(docUrl, 'application/pdf');

您也可以在保存时简单地删除/替换空格。

(这个插件也有关于 non-ASCII characters 的问题。这里的解决方案可以 get a little complex 。)

关于ios - 在 iOS 上的 Cordova 中保存文件不起作用 - 在 Android 中正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56363127/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com