微搭如何获取云存储文件的临时下载地址?
在微搭低代码平台中,当需要将云存储文件以邮件等方式发送时,可以通过获取临时下载链接来实现。
问题场景
您可能遇到以下需求:
- 上传文件后,需要通过邮件发送该文件
- 由于页面存储大小限制,不能直接发送文件内容
- 需要通过临时链接让用户下载文件
解决方案
方案一:使用 $w.cloud.getTempFileURL(推荐)
在微搭中使用内置的 $w.cloud.getTempFileURL 方法获取临时链接:
// 获取单个文件的临时链接
async function getTempFileURL() {
const fileID = $w.uploadFile1.value; // 获取上传组件的文件ID
if (!fileID) {
console.error('请先上传文件');
return;
}
// 入参为字符串,返回值也是字符串
const tempUrl = await $w.cloud.getTempFileURL(fileID);
console.log('临时链接:', tempUrl);
return tempUrl;
}
// 获取多个文件的临时链接
async function getMultipleTempFileURLs(fileIDs) {
// 入参为数组,返回值是对象 {fileID: url}
const result = await $w.cloud.getTempFileURL(fileIDs);
console.log('临时链接:', result);
// result 格式:{ 'cloud://xxx/a.jpg': 'https://...', 'cloud://xxx/b.jpg': 'https://...' }
return result;
}
方案二:通过云函数获取临时链接
如果需要在云函数中处理,可以使用云开发 Node.js SDK。
// 云函数代码
const tcb = require('@cloudbase/node-sdk');
exports.main = async (event, context) => {
const app = tcb.init({
env: tcb.getCurrentEnv()
});
const { fileList } = event;
try {
const result = await app.getTempFileURL({
fileList: fileList
});
return {
errorCode: 0,
errorMessage: 'success',
fileList: result.fileList
};
} catch (error) {
return {
errorCode: 1,
errorMessage: error.message
};
}
};
然后在微搭中调用云函数:
// 调用云函数获取临时链接
async function getTempFileURLByCloudFunction(fileID) {
const result = await $w.cloud.callFunction({
name: 'getTempFileURL',
data: {
fileList: [fileID]
}
});
return result.result.fileList[0].tempFileURL;
}
常见错误
错误 1:STORAGE_FILE_NONEXIST
错误信息:
[cloud.getTempFileURL]single item failed {fileid: '$w.uploadFile1.value', code: 'STORAGE_FILE_NONEXIST', fileID: '$w.uploadFile1.value'}
原因:文件 ID 传成了字符串字面量,而不是实际的文件 ID 值。
解决:确保传入的是变量值,而不是字符串字面量。
// 错误写法:传成了字符串字面量
const tempUrl = await $w.cloud.getTempFileURL('$w.uploadFile1.value');
// 正确写法:传入变量值
const fileID = $w.uploadFile1.value; // 获取实际的文件ID
const tempUrl = await $w.cloud.getTempFileURL(fileID);
错误 2:SyntaxError: Cannot use import statement outside a module
错误信息:
{"errorCode":1,"errorMessage":"SyntaxError: Cannot use import statement outside a module",...}
原因:在云函数中使用了 ES6 的 import 语法,但运行环境不支持。
解决:使用 CommonJS 的 require 语法。
// 错误写法
import tcb from "@cloudbase/js-sdk";
// 正确写法
const tcb = require('@cloudbase/node-sdk');
注意事项
- 临时链接有效期:临时链接默认有效期为 2 小时,建议在使用时实时获取
- 文件 ID 格式:文件 ID 的格式为
cloud://环境ID.文件路径,确保格式正确 - 权限验证:确保调用临时链接 API 的用户有访问该文件的权限
- 返回值格式:
$w.cloud.getTempFileURL入参为字符串时返回字符串,入参为数组时返回对象
相似问题
- 微搭如何获取云存储文件的下载地址?
- 微搭如何获取文件临时链接?
- 微搭上传文件后如何获取访问链接?
- 微搭如何通过邮件发送云存储文件?
- cloud.getTempFileURL 报 STORAGE_FILE_NONEXIST 错误?
- 微搭云存储临时链接有效期多久?
- 微搭如何获取上传文件的临时下载地址?
- 微搭文件上传后如何获取访问URL?
- 微搭云存储文件如何分享?
- 微搭云存储临时链接怎么用?