美文网首页
ionic3文件上传(android)

ionic3文件上传(android)

作者: 我代表咖啡 | 来源:发表于2018-07-02 14:32 被阅读0次

所用插件:cordova-plugin-file

cordova-plugin-file-transfer可以实现单个文件的上传、下载,但是看了半天只能传文件,还有其他的数据怎么办?所以就去研究文件的传输类型了。

在浏览器中用input获取的文件,属性下面有files的数组,里面文件是以二进制的形式存放的,还有文件的类型、名称和路径等。

所以想着能不能在移动设备上把获取的文件转成二进制的形式再通过post上传,然后看了看插件,插件中有很多方法,可以以各种形式获取文件:

Base64: readAsDataURL(url,filename)

文件流:readAsBinaryString(url,filename)

ArrayBuffer:readAsArrayBuffer(url,filename)

fileEntry:resolveLocalFilesystemUrl(fileurl) 注意:里面还有个getFile(directoryEntry, filename, flags)方法返回的和这个一模一样

这些方法返回的都是promise对象

用这些方法获取的文件都不是我要的形式,base64传虽然简单,但是体积会比文件大30%左右,而且也比较慢。

突然想到了Blob()对象,这不是用来处理二进制的吗?

查了下资料,可以先以base64的形式获取文件,或者把文件转换成base64

js提供了window.atob(base64)的方式对base64进行解码。再通过charCodeAt()的方式转成Uint类型。

    var bytes=window.atob(base64),      //解码  
    n=bytes.length,
    u8arr=new Uint8Array(n),
    while(n--){
        u8arr[n]=bytes.charCodeAt(n);   //将编码转换成Unicode编码
    }

我对这一操作做了封装

//文件处理
  dataURLtoBlob(dataurl) {
      let arr = dataurl.split(',');
      let mime = arr[0].match(/:(.*?);/)[1];// 结果:   image/png
      console.log("arr[0]====" + JSON.stringify(arr[0]));//   "data:image/png;base64"
      console.log("arr[0].match(/:(.*?);/)====" + arr[0].match(/:(.*?);/));// :image/png;,image/png
      console.log("arr[0].match(/:(.*?);/)[1]====" + arr[0].match(/:(.*?);/)[1]);//   image/png
      let bstr = atob(arr[1].replace(/\s/g, ''));
      let n = bstr.length;
      let u8arr = new Uint8Array(n);
      while (n--) {
          u8arr[n] = bstr.charCodeAt(n);
      }
      return new Blob([u8arr], {type: mime});//值,类型
  }

上传时的Content-Type不用设置,用formdata的形式上传会自动添加


image.png

Request Payload中的参数显示


image.png

参考:
js-用于上传的FormData与Blob
Blob对象

相关文章

  • ionic3文件上传(android)

    所用插件:cordova-plugin-file cordova-plugin-file-transfer可以实现...

  • Android上传多文件记录

    Android上传多文件记录 由于项目需要上传文件,但是之前的逐个文件的上传不符合设计要求,所以想到多文件同时上传...

  • ionic4处理android返回按钮事件

    前言 之前在这里介绍了ionic3如何处理android返回按钮 ionic4和ionic3关于android返回...

  • Android 文件上传

    android 文件上传主要有两种方式,HttpUrlConnection上传和Socket上传,下面贴出实现代码...

  • Android文件上传

    上传的方式 本文将介绍2中文件上传的方式:1.multipart/from-data方式上传。2.binary方式...

  • Android 文件上传

    文件上传在B/S应用中是一种十分常见的功能,那么在Android平台下是否可以实现像B/S那样的文件上传功能呢?答...

  • WebApi获取传来的文件

    1、如果是以文件的形式上传,这样接收: 2、如果是以文件流的形式上传(如从Android端使用retrofit上传...

  • 【技巧】Ionic3多文件上传

    关于ionic3多文件上传,网上资料非常少,特别是基于form方式的,有也大多因为代码过期而失效,因为有人问到,所...

  • Android文件上传与下载

    文件上传与下载 文件上传 -- 服务端 以Tomcat为服务器,Android客服端访问Servlet,经Serv...

  • WebView中的文件选择

    html示例 Android代码 参考:Android使用WebView加载网页选择文件上传[https://bl...

网友评论

      本文标题:ionic3文件上传(android)

      本文链接:https://www.haomeiwen.com/subject/euqluftx.html