在 jQuery 个移动项目中下载文件
Download file in jQuery mobile project
刚开始自学 javascript 和 jQuery 移动设备以创建跨平台应用程序。我希望能够在我的应用程序中单击 links 从与文件的本地(phone)版本同步(覆盖)的文档中下载 PDF 文件。
从 this 开始,我发现我应该使用 data-ajax="false"
,所以这是我的第一次尝试:
<a href="http://blablabla/download/pdf" data-ajax="false">Download</a>
不幸的是,当我在构建并将其传输到我的 phone 后单击 link 时没有任何反应。它在网络浏览器中运行良好,但在 Phonegap 应用程序中运行良好。任何想法可能是错的?我怎样才能以更好的方式做到这一点,以准确实现我打算让它做的事情?如果文件已经下载,我希望 link 改为说 "Open",并且 link 指向文件的本地版本。
Android 的浏览器中没有本机 PDF 查看器,因此它真的不知道如何处理该 PDF link,这意味着您需要下载它你自己。一种解决方案是使用 Cordova 的文件和文件传输插件。这是一个从头开始的完整工作示例,它下载了我存放在服务器上的 PDF,并允许用户在 reader 应用程序中打开它,您可以按如下方式对其进行测试。在保存源代码的目录中打开命令提示符,然后:
创建一个 Cordova 项目并进入项目目录。在命令提示符下,键入:
cordova create hello com.example.hello HelloWorld
cd hello
在项目目录内的www目录中,将www/index.html文件的全部内容替换为:
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<script src="cordova.js"></script>
<a href="#" onclick="downloadPdf();">Download PDF</a>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
alert("Got deviceready");
}
function downloadPdf() {
var fileTransfer = new FileTransfer();
var inputUri = encodeURI("http://nextwavesoftware.com/downloads/helloworld.pdf");
var outputPath = cordova.file.externalDataDirectory + "helloworld.pdf";
// var outputPath = "/storage/emulated/0/Download/helloworld.pdf";
alert("Starting download to " + outputPath);
fileTransfer.download(
inputUri,
outputPath,
function (entry) {
alert("Download complete: " + entry.fullPath + ", URL=" + entry.toURL());
cordova.plugins.fileOpener2.open(
entry.toURL(), // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
'application/pdf',
{
error: function (e) {
alert('fileOpener2 error status: ' + e.status + ' - Error message: ' + e.message);
},
success: function () {
alert('fileOpener2 file opened successfully');
}
}
);
},
function (error) {
alert("download error: source=" + error.source + ", target=" + error.target + ", error code=" + error.code);
});
}
</script>
</body>
</html>
在项目目录中,在命令提示符下,键入 cordova plugin add org.apache.cordova.file-transfer
添加文件传输插件。
在项目目录中,在命令提示符下,键入 cordova plugin add org.apache.cordova.file
添加文件插件。
在项目目录中,在命令提示符下,键入 cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2
添加 File Opener 插件。
在项目目录中,在命令提示符处键入 cordova run android
以构建应用程序并将其部署到模拟器或您的设备。
在模拟器或设备上,等到看到 Got deviceready
警报并关闭它;插件现在可以使用了。
在模拟器或设备上,单击 Download PDF
按钮。
您应该会看到一个 "Download complete" 对话框。关闭对话框,您应该会收到另一个询问 select 用于打开 PDF 文件的应用程序。
刚开始自学 javascript 和 jQuery 移动设备以创建跨平台应用程序。我希望能够在我的应用程序中单击 links 从与文件的本地(phone)版本同步(覆盖)的文档中下载 PDF 文件。
从 this 开始,我发现我应该使用 data-ajax="false"
,所以这是我的第一次尝试:
<a href="http://blablabla/download/pdf" data-ajax="false">Download</a>
不幸的是,当我在构建并将其传输到我的 phone 后单击 link 时没有任何反应。它在网络浏览器中运行良好,但在 Phonegap 应用程序中运行良好。任何想法可能是错的?我怎样才能以更好的方式做到这一点,以准确实现我打算让它做的事情?如果文件已经下载,我希望 link 改为说 "Open",并且 link 指向文件的本地版本。
Android 的浏览器中没有本机 PDF 查看器,因此它真的不知道如何处理该 PDF link,这意味着您需要下载它你自己。一种解决方案是使用 Cordova 的文件和文件传输插件。这是一个从头开始的完整工作示例,它下载了我存放在服务器上的 PDF,并允许用户在 reader 应用程序中打开它,您可以按如下方式对其进行测试。在保存源代码的目录中打开命令提示符,然后:
创建一个 Cordova 项目并进入项目目录。在命令提示符下,键入:
cordova create hello com.example.hello HelloWorld
cd hello
在项目目录内的www目录中,将www/index.html文件的全部内容替换为:
<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<script src="cordova.js"></script>
<a href="#" onclick="downloadPdf();">Download PDF</a>
<script>
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
alert("Got deviceready");
}
function downloadPdf() {
var fileTransfer = new FileTransfer();
var inputUri = encodeURI("http://nextwavesoftware.com/downloads/helloworld.pdf");
var outputPath = cordova.file.externalDataDirectory + "helloworld.pdf";
// var outputPath = "/storage/emulated/0/Download/helloworld.pdf";
alert("Starting download to " + outputPath);
fileTransfer.download(
inputUri,
outputPath,
function (entry) {
alert("Download complete: " + entry.fullPath + ", URL=" + entry.toURL());
cordova.plugins.fileOpener2.open(
entry.toURL(), // You can also use a Cordova-style file uri: cdvfile://localhost/persistent/Download/starwars.pdf
'application/pdf',
{
error: function (e) {
alert('fileOpener2 error status: ' + e.status + ' - Error message: ' + e.message);
},
success: function () {
alert('fileOpener2 file opened successfully');
}
}
);
},
function (error) {
alert("download error: source=" + error.source + ", target=" + error.target + ", error code=" + error.code);
});
}
</script>
</body>
</html>
在项目目录中,在命令提示符下,键入
cordova plugin add org.apache.cordova.file-transfer
添加文件传输插件。在项目目录中,在命令提示符下,键入
cordova plugin add org.apache.cordova.file
添加文件插件。在项目目录中,在命令提示符下,键入
cordova plugin add https://github.com/pwlin/cordova-plugin-file-opener2
添加 File Opener 插件。在项目目录中,在命令提示符处键入
cordova run android
以构建应用程序并将其部署到模拟器或您的设备。在模拟器或设备上,等到看到
Got deviceready
警报并关闭它;插件现在可以使用了。在模拟器或设备上,单击
Download PDF
按钮。
您应该会看到一个 "Download complete" 对话框。关闭对话框,您应该会收到另一个询问 select 用于打开 PDF 文件的应用程序。