gpt4 book ai didi

ios - 如何通过 XHR 将 PDF 从 assets/www 文件夹保存到 Cordova 中的文件系统?

转载 作者:行者123 更新时间:2023-11-29 10:59:21 26 4
gpt4 key购买 nike

我正在尝试使用 PDFjs 在 Cordova iOS(以及可能更高版本的 Android)中显示 PDF。 PDFjs 似乎需要网络服务器提供的文件才能使用其正常加载功能,但它会接受编码为 Uint8Array 的 PDF。

我曾尝试使用 Cordova 的 FileAPI,它具有加载到 Uint8Array 的方法来加载可以从 Documents 文件夹加载的 PDF,但我可以告诉 API似乎无法访问 www 中的文件。

PDF 最初需要与应用程序捆绑在一起,如果它们不同步,则需要通过应用程序进行更新,因此我希望能够将它们作为源的一部分,然后将它们复制到文档中可操作/可重写的文件夹。

如何将文件从 www 文件夹复制到 Documents 文件夹?我想这是一个常见的场景,但在网上找不到这样的例子。

感谢任何帮助。

瑞卡德

更新

到目前为止,我已经能够使用文件传输从单独的网络服务器下载文件:

var fileTransfer = new FileTransfer();

fileTransfer.download(
'http://localhost:8080/data/output8.pdf',// This is a webserver I am running
_fileSystem.root.fullPath+'/output8.pdf',
function(entry) {
console.log("download complete: " + entry.fullPath);
},
function(error) {
console.log("download error source " + error.source);
console.log("download error target " + error.target);
console.log("upload error code" + error.code);
}
);

因此,如果我想从远程服务器下载所有 PDF,但我需要从 www 文件夹下载它们,但我似乎找不到执行该操作的路径,那就太好了。我试过:file:///data/output8.pdf , data/output8.pdf/data/output8.pdf/p>

引用这些路径的正确方法是什么?

更新 2 - Dead End 无法保存为二进制

所以几个小时后我仍然停留在这个问题上。我已经正确地获得了 PDFjs 渲染,但仅来 self 从网络服务器提供的文件,然后是 FileTransfer 到本地文件系统,而不是我与应用程序捆绑在一起的文件。我设法使用 XHR 将文件从 www 加载到 ArrayBuffer,但无法保存它。

var xhr = new XMLHttpRequest();
xhr.open('GET','data/output8.pdf',true);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e){
var itWorked=this.status==0&&(this.response instanceof ArrayBuffer);
console.log(itWorked?'looks like it worked':'hmm there was an issue: '+this.status);
var myArrayBuffer = this.response;

theFileSystem.root.getFile('output8.pdf',{create:true},function(entry){
entry.createWriter(function(fileWriter){
fileWriter.onwrite = function(){
console.log('file has been written');
};
// Turns out the following does not work in
// Cordova which cannot write binary to a file.
var blob = new Uint8Array(myArrayBuffer);
fileWriter.write(blob);//Doesnt work
},fail);
},fail);
}
xhr.ontimeout=function(e){
console.log('timeout');
}
xhr.send();

最佳答案

睡了一觉后,我设法解决了问题。解决方案是确定相对绝对路径,然后将路径 URL 编码如下:

var fileTransfer = new FileTransfer();
var relativeFileLocation = 'data/output8.pdf';
var fileSystemFileLocation = '/output8.pdf';
var docsPath = fileSystem.root.fullPath;
var wwwPath = docsPath.substring(0, docsPath.lastIndexOf('/'))+'/testios27.app/www/'
var filePath = wwwPath+relativeFileLocation;
fileTransfer.download(
'file://'+encodeURI(filePath),
theFileSystem.root.fullPath+'/output8.pdf', // Ouput path
onTransferComplete,
fail);

这主要是因为路径可能需要针对不同的平台进行不同的计算。

关于ios - 如何通过 XHR 将 PDF 从 assets/www 文件夹保存到 Cordova 中的文件系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16706130/

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