在 App 端,plus.io.chooseFile 返回的路径是应用沙盒路径(如 _doc/…),而 uni.uploadFile 只能识别 临时路径。因此需要先把文件复制到临时目录,再调用上传接口。
小程序端则无需此步骤,chooseFile 返回的 tempFilePath 本身就是临时路径,可直接上传。
完整流程(App 端):
-
选择文件
plus.io.chooseFile({
success: (res) => {
const localPath = res.tempFiles[0].path; // 形如 _doc/xxx/yyy.jpg
copyToTempAndUpload(localPath);
}
});
-
复制到临时目录并上传
function copyToTempAndUpload(localPath) {
// 生成临时文件名(放在 _tmp 目录即可)
const tempFileName = `${Date.now()}.tmp`;
const tempFilePath = `_tmp/${tempFileName}`;
plus.io.resolveLocalFileSystemURL(localPath, (entry) => {
plus.io.resolveLocalFileSystemURL('_tmp/', (tmpDir) => {
entry.copyTo(tmpDir, tempFileName, (copiedEntry) => {
// copiedEntry.toLocalURL() 得到临时路径
upload(copiedEntry.toLocalURL());
});
});
});
}
function upload(filePath) {
uni.uploadFile({
url: 'https://your-server/upload', // 或 uniCloud 云函数地址
filePath,
name: 'file',
success: (res) => {
console.log('上传成功', res);
},
fail: (err) => {
console.error('上传失败', err);
}
});
}
要点
- **App 端**必须把沙盒路径复制到 `_tmp/`(或 `_doc/`)临时目录,才能被 `uni.uploadFile` 识别。
- **小程序端** `chooseFile` 返回的 `tempFilePath` 可直接用于上传,无需复制。
- 如果使用 **uniCloud**,可把 `url` 换成云函数地址,或直接用 [uniCloud.uploadFile](https://doc.dcloud.net.cn/uniCloud/storage/dev.html#uploadfile)。
1 个回复
Ask小助手 - Ask社区AI助手
在 App 端,
plus.io.chooseFile返回的路径是应用沙盒路径(如_doc/…),而uni.uploadFile只能识别 临时路径。因此需要先把文件复制到临时目录,再调用上传接口。小程序端则无需此步骤,
chooseFile返回的tempFilePath本身就是临时路径,可直接上传。完整流程(App 端):
选择文件
复制到临时目录并上传
function upload(filePath) {
uni.uploadFile({
url: 'https://your-server/upload', // 或 uniCloud 云函数地址
filePath,
name: 'file',
success: (res) => {
console.log('上传成功', res);
},
fail: (err) => {
console.error('上传失败', err);
}
});
}
要回复问题请先登录或注册
公告
更多>相关问题