OaApp之文件上传篇

文件上传功能

 一、

Uniapp 官方提供了文件选择api ,uni.chooseFile(OBJECT)

  官方提供的使用方法和说明:

   从本地选择文件。

本API主要用于选择非媒体文件,如果选择的文件是媒体文件,另有3个专用API:

OBJECT 参数说明

参数名

类型

默认值

必填

说明

平台差异说明

count

Number

100

最多可以选择的文件数量

见下方说明

type

String

'all'

所选的文件的类型

见下方说明

extension

Array<String>

 

根据文件拓展名过滤,每一项都不能是空字符串。默认不过滤。

见下方说明

sourceType

Array<String>

['album','camera']

(仅在type为image或video时可用)album 从相册选图,camera 使用相机,默认二者都有。如需直接开相机或直接选相册,请只使用一个选项

 

success

Function

 

成功则返回图片的本地文件路径列表 tempFilePaths

 

fail

Function

 

接口调用失败的回调函数

 

complete

Function

 

接口调用结束的回调函数(调用成功、失败都会执行)

 

Tips

  • count 值在 H5 平台的表现,基于浏览器本身的规范。目前测试的结果来看,只能限制单选/多选,并不能限制数量。并且,在实际的手机浏览器很少有能够支持多选的。
  • sourceType 在H5端对应input的capture属性,设置为['album']无效,依然可以使用相机。
  • extension暂只支持文件后缀名,例如['.zip','.exe','.js'],不支持application/msword等类似值

注:文件的临时路径,在应用本次启动期间可以正常使用,如需持久保存,需在主动调用 uni.saveFile,在应用下次启动时才能访问得到。

success 返回参数说明

参数

类型

说明

tempFilePaths

Array<String>

文件的本地文件路径列表

tempFiles

Array<Object>、Array<File>

文件的本地文件列表,每一项是一个 File 对象

File 对象结构如下

参数

类型

说明

path

String

本地文件路径

size

Number

本地文件大小,单位:B

name

String

包含扩展名的文件名称,仅H5支持

type

String

文件类型,仅H5支持

示例

uni.chooseFile({

  count: 6, //默认100

  extension:['.zip','.doc'],

    success: function (res) {

        console.log(JSON.stringify(res.tempFilePaths));

    }});

// 选择图片文件

uni.chooseFile({

  count: 10,

  type: 'image',

  success (res) {

    // tempFilePath可以作为img标签的src属性显示图片

    const tempFilePaths = res.tempFiles

  }})

 

 

Ps:以上 是uni.chooseFile()的使用方法,但其仅适用H5端

二 、app端文件上传  

  1. 首先介绍一下用到的两个api:uni,.saveFile(object) 存储文件到文件夹以及 uni.openDcument(object) 打开文档 的使用方法 和说明

 

uni.saveFile(OBJECT)

保存文件到本地。

平台差异说明

App

H5

微信小程序

支付宝小程序

百度小程序

字节跳动小程序

QQ小程序

x

注意:saveFile 会把临时文件移动,因此调用成功后传入的 tempFilePath 将不可用。

OBJECT 参数说明:

参数名

类型

必填

说明

tempFilePath

String

需要保存的文件的临时路径

success

Function

返回文件的保存路径,res = {savedFilePath: '文件的保存路径'}

fail

Function

接口调用失败的回调函数

complete

Function

接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明:

参数

说明

savedFilePath

文件的保存路径

示例代码:

uni.chooseImage({

  success: function (res) {

    var tempFilePaths = res.tempFilePaths;

    uni.saveFile({

      tempFilePath: tempFilePaths[0],

      success: function (res) {

        var savedFilePath = res.savedFilePath;

      }

    });

  }});

 

uni.openDocument(OBJECT)

新开页面打开文档,支持格式:doc, xls, ppt, pdf, docx, xlsx, pptx。

平台差异说明

App

H5

微信小程序

支付宝小程序

百度小程序

字节跳动小程序

QQ小程序

x

OBJECT 参数说明:

参数名

类型

必填

说明

平台差异说明

filePath

String

文件路径,可通过 downFile 获得

 

fileType

String

文件类型,指定文件类型打开文件,有效值 doc, xls, ppt, pdf, docx, xlsx, pptx

微信小程序

success

String

接口调用成功的回调函数

 

fail

String

接口调用失败的回调函数

微信小程序

complete

String

接口调用结束的回调函数(调用成功、失败都会执行)

 

示例代码:

uni.downloadFile({

  url: 'https://example.com/somefile.pdf',

  success: function (res) {

    var filePath = res.tempFilePath;

    uni.openDocument({

      filePath: filePath,

      success: function (res) {

        console.log('打开文档成功');

      }

    });

  }});

 

 

  1. 组件的调用:

 <l-file

    ref="lFile" 

    @up-success="upSuccess"

></l-file>

3.方法说明:

/* 预览临时文件 */

this.$refs.lFile.download({url})

.then(path=>{

    this.$refs.lFile.open(path);

});

/**

* 保存到本地

* type 非save为临时下载

* customName 仅type=save生效 附件自定义名称需带后缀,自定义目录需以/结尾

* DownloadOptions 仅type=save生效 可选参数(http://www.html5plus.org/doc/zh_cn/downloader.html#plus.downloader.DownloadOptions)

* 默认下载到_downloads/files/ 可通过DownloadOptions自定义

*/this.$refs.lFile.download({

    url, //必填,附件网络地址

    type:'save', //选填,非save为临时下载

    customName:'自定义文件名需要带后缀.jpg',

    //...DownloadOptions直接写key:value

    // 例如:

    method: 'GET'

})

.then(path=>{

    this.localPath = path;

});

/*

选择文件并上传

 

currentWebview=当前窗口,仅app端需要传,且必传

 

url=上传服务器地址,必填

name=上传文件的key(选填,默认为file)

header=请求头(选填)

*/this.$refs.lFile.upload({

    // #ifdef APP-PLUS

    currentWebview: this.$mp.page.$getAppWebview(),

    // #endif

    url: '', //你的上传附件接口地址

    name: 'file',

    header: {'Authorization':'token'},

    // body参数直接写key,value,如:

    // key1: 'value1',

    // key2: 'value2',

});

App 平台同时支持网络网页和本地网页,但本地网页及相关资源(js、css等文件)必须放在 uni-app 项目根目录->hybrid->html 文件夹下或者 static 目录下 

本地资源存放路径:

 

 

 

其中主要是使用 plus.webview 导入 本地html 来进行文件的选择(也可以使用在线资源)

 

在本地页面中 利用JSBridge进行通信,

 

 

然后在里面监听是否选取了文件, 然后调用上传方法createUpload()进行文件上传

 

 

 

posted on 2022-08-25 10:20  紫叶嵋  阅读(325)  评论(0编辑  收藏  举报