当前位置:   article > 正文

ng-Cordova插件之fileTransfer的使用

cordova filetransfer

其实我觉得gitHub上的文档说的已经很详细了,但是鉴于是一个比较常用的插件以及貌似使用方法稍微的要比ng-camera那样看起来简单点,所以这里稍微的写写记录下

 

$cordovaFileTransfer的用处:用于文件的上传和下载,图片表单等等

$cordovaFileTransfer支持上传、下载等,这里我们暂且说下文件的上传,此处用图片举例

 

需求:拍照、查看、上传

具体实现:

前端代码:

  1. <ons-list-item class="list-item-ons" style="padding: 0;margin-top: 0.5em" ng-repeat="picture in pictures" ng-init="index = $index+1">
  2.      <ons-carousel style="height: 3.2em;width: 180%;" swipeable item-width="60%" auto-scroll var="carouselCamear">
  3.          <ons-carousel-item class="list-action-menu">
  4.              <ons-row>
  5.                  <ons-col width="5">
  6.                      <div class="divBorder{{index}}"></div>
  7.                  </ons-col>
  8.                  <ons-col width="10%">
  9.                      <div class="divCircle">
  10.                          <div class="circleValue">{{index}}</div>
  11.                      </div>
  12.                  </ons-col>
  13.                  <ons-col width="40%">
  14.                      <div class="divDate">现场拍照</div>
  15.                  </ons-col>
  16.                  <ons-col ng-click="takePicture($index)">
  17.                      <div class="divImg">
  18.                          <img class="imgValue"
  19.                               src="images/camera.png">
  20.                      </div>
  21.                  </ons-col>
  22.                  <ons-col width="5%" style="text-align: right" ng-if="picture.value">
  23.                      <div class="checkLine"></div>
  24.                  </ons-col>
  25.                  <ons-col ng-if="picture.value" ng-click="checkPic($index)">
  26.                      <div class="check">查看</div>
  27.                  </ons-col>
  28.              </ons-row>
  29.          </ons-carousel-item>
  30.          <ons-carousel-item class="list-action-item">
  31.              <p style="height:60px;background-color: #ffa500;color:white;margin: -10px;padding-left: 11%;line-height: 60px">
  32.                  <ons-icon icon="fa fa-trash-o"></ons-icon>
  33.              </p>
  34.          </ons-carousel-item>
  35.      </ons-carousel>
  36.  </ons-list-item>

这里用到onsen中的carousel,当然,这里不需理会主要也就是ng-repeat

  1. $scope.pictures = [
  2.      {value: false, imgSrc: ""},
  3.      {value: false, imgSrc: ""},
  4.      {value: false, imgSrc: ""},
  5.      {value: false, imgSrc: ""},
  6.      {value: false, imgSrc: ""}];

其中在图片上传中最主要的是imgSrc

上传的代码如下(我这里是写在factory里面,因为可以共用):

  1. upLoad:function(imgRul,tempParam,success,error){
  2.      try{
  3.          var options = new FileUploadOptions();
  4.          options.filekey = "file";
  5.          options.fileName = "test.jpg";
  6.          options.mimeType = "image/jpeg";
  7.          options.chunkedMode=false;
  8.          options.params = tempParam;
  9.  
  10.          var fileTransfer = new FileTransfer();
  11.          fileTransfer.upload(
  12.              imgRul,
  13.              encodeURI("http://222.92.140.204:8080/hms-furui/afwkFile/upload"),
  14.              success,
  15.              error,
  16.              options
  17.          );
  18.      }catch(e){
  19.          showAlert('提示',e);
  20.      }
  21.  }

简明说下里面主要的东西

第一是上传:

  1. fileTransfer.upload(
  2.      imgRul,
  3.      encodeURI("http://222.92.140.204:8080/hms-furui/afwkFile/upload"),
  4.      success,
  5.      error,
  6.      options
  7.  );

其中第一个参数是图片在本地的URL地址,第二个参数是service地址,官网文档是encoded by encodeURI();当然我们都知道这里是为了防止乱码。第三个和第四个参数是成功和失败的回调函数,这些都很简单,最后一个options貌似有些讲究,展开说下:

Options是可选的一些参数,通过var options = new FileUploadOptions()获取出来(插件封装好的)

然后填充options中的一些属性值

1、 fileKey:这个元素的名称,服务端通过这个拿,我的理解是个key

2、 filename:上传的文件存在服务端的名称,默认是image.jpg

3、 httpMethod:顾名思义,http的请求方式,默认是post

4、 mimeType:一种标准,默认的是image/jpeg

5、 params:参数,这里面放的是一个对象,除了传过去图片还有别的一些信息啦,比如id啊啥啥啥乱七八糟的都在这里,有用!

当然还有别的一些东西貌似我们也不怎么用到

 

也就这么简单,我们就可以实现图片的上传了

 

但是很郁闷,这里我要实现过个图片的上传,说实话我从官网文档中并没有找到怎么实现过个图片的上传,我觉得是可以的,因为官网有这么一句话:                                               S!有木有,但是文档中又有这句话a!有木有!

好了,这些都先不去在意了吧,我再查查和问问怎么实现一次传送多个图片,目前我的实现方式是(当然也还是不怎么完美的):

  1. //保存上传图片
  2.  $scope.upLoad = function () {
  3.      var errorCount = 0;
  4.      var success = function (r) {
  5.          errorCount += 1;
  6.      };//成功的毁掉函数
  7.      var error = function (error) {
  8.          errorCount += 1;
  9.          showAlert('提示'"第" + errorCount + "张图片上传失败!上传终止!");
  10.          return;
  11.      };
  12.      var tempParam = {
  13.          "document_id": orderId,
  14.          "document_type": orderStatus,
  15.          "created_by": user,
  16.          "url""pictures"
  17.      };
  18.      for (var i = 0; i < $scope.pictures.length; i++) {
  19.          if ($scope.pictures[i].imgSrc != "") {
  20.              var imgUrl = $scope.pictures[i].imgSrc;
  21.              workOrderFactory.upLoad(imgUrl, tempParam, success, error);
  22.          }
  23.      }
  24.      showAlert('提示''图片上传成功!');
  25.  };

判断$scope.pictures[i].imgSrc有木有值,有的话,就传,失败就停止!如何判断失败停止,我这里加了个变量:errorCount,每次上传一张的时候就会调用回调函数,error,或者success,我在success里面每次成功就+1,方便提示第几张上传错误,在error里面给出提示信息,并且终止函数的继续。如果没有遇到return,则说明图片都上传成功了,所以也同样给出提示信息。

一般我会觉得不会出现错误的,因为一点击保存,就跳出来图片上传成功,快到真的不敢相信(我不知道是不是还存在异步的问题,但是至少目前我测试的都是么有问题的)

 

后续如果还有更好的一次上传多个图片的方法会陆续整理。如果有bug也会及时来修改!

 

好吧,暂且说到这里咯n(*≧▽≦*)n


转载于:https://my.oschina.net/Nealyang/blog/529789

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号