当前位置:   article > 正文

cordova filetransfer插件——上传、下载文件

cordova filetransfer插件——上传、下载文件


介绍

FileTransfer对象提供给了一种将文件上传到服务器的方法,可以通过HTTPHTTPS进行请求,可以传递一个由FileUploadOptions对象设定的可选参数给upload方法。上传成功后,系统会调用成功回调函数并传递一个FileUploadResult对象。如果出现错误,那么系统会调用错误回调函数并传递一个FileTransferError对象。





安装

cordova plugin add cordova-plugin-file-transfer





支持的平台

· Amazon Fire OS

· Android

· BlackBerry 10

· Browser

· Firefox OS**

· iOS

· Windows Phone 7 and 8*

· Windows





使用方法

这个插件定义了全局的FileTransfer,FileUploadOptions 构造函数。虽然在全局范围内,但是他们需要在deviceready事件之后才可用

  1. document.addEventListener("deviceready", onDeviceReady, false);
  2. function onDeviceReady() {
  3. console.log(FileTransfer);
  4. }




属性

onprogress: 使用調用 `ProgressEvent`每当一个新的数据块传输。(函数)






方法

upload: 将文件发送到服务器。

download: 从服务器下载一个文档。

abort: 中止正在进行的传输。






示例

示例一:上传图片

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
  6. <meta name="format-detection" content="telephone=no">
  7. <meta name="msapplication-tap-highlight" content="no">
  8. <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
  9. <title>Hello World</title>
  10. <style>
  11. .line {
  12. padding: 5px;
  13. }
  14. #myImage {
  15. height: 200px;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div class="app">
  21. <div class="line"><button id="openLabrary">按钮</button></div>
  22. <div class="line"><img id="myImage"></img></div>
  23. <div class="line"><span id="text"></span></div>
  24. </div>
  25. <script type="text/javascript" src="cordova.js"></script>
  26. <script type="text/javascript" src="js/index.js"></script>
  27. </body>
  28. </html>

index.js

  1. var app = {
  2. initialize: function() {
  3. document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
  4. },
  5. onDeviceReady: function() {
  6. this.receivedEvent();
  7. },
  8. $$: function(id) {
  9. return document.getElementById(id);
  10. },
  11. receivedEvent: function(){
  12. var getDomLabrary = this.$$('openLabrary');
  13. var _this = this;
  14. getDomLabrary.onclick = function(){
  15. // 打开图片库
  16. navigator.camera.getPicture(onSuccess, onFail, {
  17. quality: 50, // 相片质量是50
  18. sourceType : Camera.PictureSourceType.SAVEDPHOTOALBUM, // 设置从图片库获取
  19. destinationType: Camera.DestinationType.FILE_URI // 以文件路径返回
  20. });
  21. function onSuccess(imageURI) {
  22. console.log(imageURI)
  23. _this.$$('myImage').src = imageURI;
  24. // 上传
  25. _this.upload(imageURI);
  26. }
  27. function onFail(message) {
  28. alert('Failed because: ' + message);
  29. }
  30. }
  31. },
  32. //使用FileTransfer插件,上传文件
  33.   upload(fileURL) {
  34.     //上传成功
  35.     var success = function (r) {
  36.       alert("上传成功! Code = " + r.responseCode);
  37.     }
  38.     //上传失败
  39.     var fail = function (error) {
  40.       alert("上传失败! Code = " + error.code);
  41.     }
  42.  
  43.     var options = new FileUploadOptions();
  44.     options.fileKey = "file1";
  45.     options.fileName = fileURL.substr(fileURL.lastIndexOf('/') + 1);
  46.     //options.mimeType = "text/plain";
  47.  
  48.     //上传参数
  49.     var params = {};
  50.     params.value1 = "test";
  51.     params.value2 = "param";
  52.     options.params = params;
  53.  
  54.     var ft = new FileTransfer();
  55.     //上传地址
  56.     var SERVER = "http://10.1.10.53:8089/oss/UploadServlet"
  57.     ft.upload(fileURL, encodeURI(SERVER), success, fail, options);
  58.   }
  59. };
  60. app.initialize();



运行:

点击按钮,打开图片库,选择图片,显示

上传成功


 

备注:

这个上传的服务器路径:

var SERVER = "http://10.1.10.53:8089/oss/UploadServlet"

使用了一个.jsp文件写成的





 

 

示例二:下载图片

 

index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8"/>
  5. <meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; img-src 'self' data: content:;">
  6. <meta name="format-detection" content="telephone=no">
  7. <meta name="msapplication-tap-highlight" content="no">
  8. <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
  9. <title>Hello World</title>
  10. <style>
  11. .line {
  12. padding: 5px;
  13. }
  14. #myImage {
  15. height: 200px;
  16. }
  17. </style>
  18. </head>
  19. <body>
  20. <div class="app">
  21. <div class="line"><button id="download">下载</button></div>
  22. <div class="line"><img id="myImage"></img></div>
  23. <div class="line"><span id="text"></span></div>
  24. </div>
  25. <script type="text/javascript" src="cordova.js"></script>
  26. <script type="text/javascript" src="js/index.js"></script>
  27. </body>
  28. </html>

 

 

index.js

  1. var app = {
  2. // Application Constructor
  3. initialize: function() {
  4. document.addEventListener('deviceready', this.onDeviceReady.bind(this), false);
  5. },
  6. // deviceready Event Handler
  7. onDeviceReady: function() {
  8. this.receivedEvent();
  9. },
  10. // get DOM
  11. $$: function(id) {
  12. return document.getElementById(id);
  13. },
  14. receivedEvent:function() {
  15. var _this = this;
  16. var dlDom = this.$$('download');
  17. dlDom.onclick = function() {
  18. _this.createFilePath();
  19. }
  20. },
  21. // 创建文件路径
  22. createFilePath: function() {
  23. var _this = this;
  24. window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function(fs) {
  25. fs.root.getFile("downloadedImage.png", { create: true, exclusive: false }, function (fileEntry) {
  26. console.log(fileEntry);
  27. //调用fileTransfer插件,下载图片
  28. _this.downLoadImg(fileEntry.nativeURL);
  29. }, function(err) {
  30. console.log(err);
  31. });
  32. }, function(error) {
  33. console.log(error);
  34. });
  35. },
  36. // fileTransfer plugin
  37. downLoadImg: function(fileURL) {
  38. var _this = this;
  39. // 初始化FileTransfer对象
  40. var fileTransfer = new FileTransfer();
  41. // 服务器下载地址
  42. var uri = encodeURI("http://avatar.csdn.net/7/E/0/1_michael_ouyang.jpg");
  43. // 调用download方法
  44. fileTransfer.download(
  45. uri, //uri网络下载路径
  46. fileURL, //url本地存储路径
  47. function(entry) {
  48. console.log("download complete: " + entry.toURL());
  49. _this.$$('myImage').src = entry.toURL();
  50. },
  51. function(error) {
  52. console.log("download error source " + error.source);
  53. console.log("download error target " + error.target);
  54. console.log("upload error code" + error.code);
  55. }
  56. );
  57. }
  58. };
  59. app.initialize();

 

 

运行

点击按钮,下载图片


图片下载成功后,显示在页面上



备注:

控制台输出的fileEntry对象的内容

 

拿到这个图片在手机系统的路径

file:///data/user/0/com.abc.www/files/files/downloadedImage.png

 

现在打开手机的文件管理器,是找不到该图片的

因为我们没有设置持久化文件的保存路径,默认会保存在data里面

那么在config.xml中加上这一句代码

<preference name="AndroidPersistentFileLocation"value="Compatibility"/>

再启动应用下载图片,fileEntry对象的nativeURL变成了storage

 

file:///storage/emulated/0/downloadedImage.png

打开手机的文件管理器,查看下载回来的图片






声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/311949
推荐阅读
相关标签
  

闽ICP备14008679号