uni-app 选择和上传非图像、视频文件
uni-app 选择和上传非图像、视频文件
小程序和H5端,参考: https://uniapp.dcloud.io/api/media/file
App端,可以使用如下方法:
- 使用 web-view 组件,在 web-view 组件内可以使用 input 元素进行选择,使用表单或者 xhr 上传。
- 在插件市场搜索原生插件:https://ext.dcloud.net.cn/search?q=file
关联阅读:视频、图片、各种文件推荐上传到uni-cdn
,帮你节省至少30%的 CDN 费用!详情
1 回复
在处理 uni-app
中的非图像、视频文件上传时,你需要处理文件选择、文件读取和文件上传等步骤。以下是一个简单的示例代码,展示了如何在 uni-app
中选择和上传非图像、视频文件(如文本文件、PDF等)。
1. 文件选择
使用 <input type="file">
元素进行文件选择。在 uni-app
中,可以通过 plus.io.resolveLocalFileSystemURL
访问本地文件。
<template>
<view>
<button @click="chooseFile">选择文件</button>
<view v-if="filePath">
<text>选中文件: {{ filePath }}</text>
<button @click="uploadFile">上传文件</button>
</view>
</view>
</template>
<script>
export default {
data() {
return {
filePath: ''
};
},
methods: {
chooseFile() {
const input = document.createElement('input');
input.type = 'file';
input.accept = '*'; // 允许选择所有文件类型
input.onchange = (e) => {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = (event) => {
const localURL = event.target.result;
// 这里localURL为文件的blob URL,你可以通过plus API进一步处理
this.filePath = localURL;
};
reader.readAsDataURL(file);
}
};
input.click();
},
uploadFile() {
// 假设你有一个上传接口:https://example.com/upload
const xhr = new XMLHttpRequest();
const formData = new FormData();
formData.append('file', {
uri: this.filePath,
type: 'application/octet-stream', // 根据实际文件类型调整
name: 'filename.txt' // 文件名,可以根据需要调整
});
xhr.open('POST', 'https://example.com/upload', true);
xhr.onload = () => {
if (xhr.status === 200) {
console.log('上传成功:', xhr.responseText);
} else {
console.error('上传失败:', xhr.statusText);
}
};
xhr.send(formData);
}
}
};
</script>
注意事项
- 文件类型处理:示例中使用了
accept='*'
来允许选择所有文件类型。你可以根据需要调整accept
属性来限制文件类型。 - 文件读取:使用
FileReader
读取文件内容,并生成一个本地 URL。在uni-app
中,你可能需要借助plus
API 进一步处理文件。 - 文件上传:使用
XMLHttpRequest
和FormData
对象进行文件上传。确保你的服务器支持处理multipart/form-data
请求。
这个示例代码展示了基本的文件选择和上传流程。根据你的具体需求,你可能需要进一步优化和扩展这个示例。