uniapp 安卓app 非媒体文件上传下载

3,059 阅读1分钟

记一次,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内部的通信问题,因时间有限暂没有研究这种方法。

最后,上面的文章有许多是在网上找到的一些解决方法进行一些拼凑,本文也只是一次记录,不喜勿喷。