记一次,uniapp 安卓app非媒体文件上传下载的学习记录
上传
首先要解决安卓app文件上传问题,就要考虑app中文件的选取和上传问题。因为uniapp input不支持type=file,所以就要使用原生的文件路径选取api 以及uniapp的文件上传api。
文件的话选取由于本人对安卓原生不熟悉,所以首先考虑插件市场的文件选取组件 tki-file-manager 详细信息点击连接查看,这里只是搬运一下实例以方便阅读。然后上传到服务器使用uniapp 官方api uni.uploadFile 方法。
<template>
<view class="content">
<button type="primary" @tap="openFile">打开文件选择器</button>
<view>文件路径为:</view>
<view class="path">{{path}}</view>
<tki-file-manager ref="filemanager" @result="resultPath"></tki-file-manager>
</view>
</template>
<script>
import tkiFileManager from "@/components/tki-file-manager/tki-file-manager.vue"
export default {
data() {
return {
title: '',
baseUrl: '',
path: ''
}
},
methods: {
openFile(){
this.$refs.filemanager._openFile()
},
//
resultPath(path){
this.path = path
this.sendFile()
},
// 将文件上到服务器
sendFile() {
uni.uploadFile({
url: baseUrl,
filePath: this.path,
name: 'file', header: {
'Authorization': uni.getStorageSync('lifeData').vuex_token
},
success: (uploadFileRes) => {
console.log(uploadFileRes.data.id);
}
});
},
},
components: {
tkiFileManager
}
}
</script>
<style>
.content {
width: 100%;
overflow: hidden;
}
.path{
font-size: 14px;
word-break:break-all;
}
</style>
下载
由于app环境中无Blob对象 下载的话这里在网上找到的使用到原生的api plus.downloader.createDownload 进行文件保存的方法。
// 下载请求
async downloadFileFn(id) {
// #ifdef APP-PLUS
let res = await downloadFile({ id: id });// 封装的按id获取文件接口的 方法
let path = res.data.path;
console.log(path);
let url = path;
let name = this.file.name;
// var name = 'fileName.docx'; //文件名称可以在上传时进行保存,下载时取出,当文件名称中存在单双引号时,要做好处理,否则会报错
var dtask = plus.downloader.createDownload(
url,
{
filename: '_downloads/' + name //利用保存路径,实现下载文件的重命名
},
function(d, status) {
var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
plus.runtime.openFile(d.filename); //选择软件打开文件
}
);
dtask.start();
// #endif
}
}
只是一种思路,网上文件上传还有一种是使用安卓原生webview 进行内嵌网页进行上传,但是就要考虑内嵌网页和app内部的通信问题,因时间有限暂没有研究这种方法。
最后,上面的文章有许多是在网上找到的一些解决方法进行一些拼凑,本文也只是一次记录,不喜勿喷。