uniCloud
36 人关注该话题
云数据库JQL多表联查时,关联字段的数据数组中会查询出全部的数据 uniCloud
套马杆的套子 2024-11-21 13:39 回复问题 • 2 人关注 • 1 个回复 • 20 次浏览
为什么支付宝云上传云函数会报错 uniCloud
DCloud_uniCloud_VK 2024-11-21 12:04 回复问题 • 1 人关注 • 1 个回复 • 29 次浏览
uni-ai minimax模型abab6.5s-chat是不是应该加一个联网搜索 uniCloud
1***@163.com 2024-11-20 17:23 发起问题 • 1 人关注 • 0 个回复 • 24 次浏览
使用foreignKey进行联表查询 uniCloud
5***@qq.com 2024-11-20 11:54 回复问题 • 4 人关注 • 4 个回复 • 85 次浏览
支付宝云的云函数可以访问腾讯云的数据库吗? uniCloud
套马杆的套子 2024-11-18 13:21 回复问题 • 2 人关注 • 1 个回复 • 31 次浏览
请问unicloud云对象如何返回stream流式数据,前端是使用new EventSource来接收数据 uniCloud
DCloud_uniCloud_CRL 2024-11-18 12:09 回复问题 • 1 人关注 • 1 个回复 • 26 次浏览
uni-admin部署使用uniCloud的云函数能不能部署在本地? uniCloud uni-admin
DCloud_heavensoft 2024-11-16 00:01 回复问题 • 1 人关注 • 1 个回复 • 46 次浏览
#插件讨论# 【 uni-im - DCloud前端团队 】不需要unicloud uniCloud uniapp 插件讨论
dairy 2024-11-14 16:27 发起问题 • 1 人关注 • 0 个回复 • 34 次浏览
uniapp android端一键登录“预登陆” 返回30004 (preLogin:fail -20102其他错误) 打包错误 Android uniapp uniCloud 一键登录
b***@qq.com 2024-11-14 11:17 回复问题 • 4 人关注 • 2 个回复 • 270 次浏览
uniCloud如何海外访问
海外
uniCloud
负责人:DCloud_uniCloud_VK
DCloud_uniCloud_VK 2024-11-12 14:57 回复问题 • 1 人关注 • 1 个回复 • 59 次浏览
一个APP用2个网址通信是否有什么弊端? vue3 uniCloud uniapp 移动APP
DCloud_UNI_CHB 2024-11-12 14:20 回复问题 • 2 人关注 • 1 个回复 • 75 次浏览
uniCloud.httpClient.request返回stream流式数据为什么一直到全部接收完才能处理? stream uniCloud
xyzzzz 2024-11-12 10:48 回复问题 • 3 人关注 • 4 个回复 • 628 次浏览
赞同来自: sk_in_china
unicloud已支持扩展存储,具有更强大的自定义权限控制,更便宜的cdn流量价格,流量按阶梯收费,越用越便宜,具体算来下比用传统cdn流量包还便宜。
而且不管空间是包月的还是按量计费的都能开通扩展存储。
扩展存储... 显示全部 »
unicloud已支持扩展存储,具有更强大的自定义权限控制,更便宜的cdn流量价格,流量按阶梯收费,越用越便宜,具体算来下比用传统cdn流量包还便宜。
而且不管空间是包月的还是按量计费的都能开通扩展存储。
扩展存储是DCloud联合业内其它主流CDN厂商,单独提供了价格更便宜、功能更强大的uniCloud扩展存储
扩展存储文档: [https://doc.dcloud.net.cn/uniCloud/ext-storage/intro.html](https://doc.dcloud.net.cn/uniCloud/ext-storage/intro.html)
扩展存储开通指南: [https://doc.dcloud.net.cn/uniCloud/ext-storage/service.html](https://doc.dcloud.net.cn/uniCloud/ext-storage/service.html)
## 以下是2023-06-05日的回答
1、首先阿里云的云存储没有权限管理而url是固定的,如果存入一些敏感信息比如身份证照片,其他人有没有遍历我的阿里云的服务空间找出这些身份证的能力?
答:目前阿里云空间云储存因为是公开权限,不适合直接将身份证储存到云储存, 但我们可以通过在云函数把身份证图片转成base64后,再将base64进行AES加密, 得到的密文转二进制后上传到云储存。这样即使被扫描,对方也无法破解图片。
当你需要看身份证时,通过云函数去解密得到原始的base64,就可以显示图片了。
2、如果我使用腾讯云虽然有权限限制但是要获取url好像必须使用uniCloud.getTempFileURL函数实现,那么带来的问题是这个函数调用应该是计费的
答: 是的,会消耗CDN流量和下载次数
3、用腾讯云每个地方都要套一层uniCloud.getTempFileURL?
答:是的,不过腾讯云如果设置公共读权限,则获取到的临时url其实是永久有效的。
4、上面说"阿里云不支持此API,前端运行此API会报权限错误",那么在云函数中是否可以使用此api。
答:云函数中可以使用此api。
5、最后如果用户恶意大量上传数据有没有办法阻止?
答:目前没办法阻止,只要提供了前端直传能力的oss,就没办法阻止用户上传(不过可以联系官方帮你把你空间上传功能关闭了),但用户只上传的话,影响比较小,毕竟可以去控制台删除。云储存的费用大头是CDN流量,上传不会扣CDN流量,访问才扣,同时当你流量超过1G了,第二天可以开通CDN安全管理,可以封访问量过大的IP,UA等等。
```js
uniCloud.importObject('云对象名', {
customUI: true // 取消自动展示的交互提示界面
})
```
多加一个 `customUI: true`
```js
uniCloud.importObject('云对象名', {
customUI: true // 取消自动展示的交互提示界面
})
```
多加一个 `customUI: true`
阿里云、腾讯云未对外暴漏网关功能,自己可以基于redis做防刷设计,但会消耗一定的云函数资源。
详见:[https://doc.dcloud.net.cn/uniCloud/ip-filter.ht... 显示全部 »
阿里云、腾讯云未对外暴漏网关功能,自己可以基于redis做防刷设计,但会消耗一定的云函数资源。
详见:[https://doc.dcloud.net.cn/uniCloud/ip-filter.html#基于redis-阿里-腾讯云](https://doc.dcloud.net.cn/uniCloud/ip-filter.html#基于redis-阿里-腾讯云)
赞同来自: Junan_
### 1、在```network``` 中找到```https://unicloud-api.dcloud.net.cn/unicloud/api/file/list```这个接口,... 显示全部 »
### 1、在```network``` 中找到```https://unicloud-api.dcloud.net.cn/unicloud/api/file/list```这个接口,右击 ```copy``` - ```Copy as Fetch```
** 插入的附件 **
### 2、创建一个js, 复制下方js
```js
const fs = require('fs');
async function fetchAllPagesWithProgress() {
let allData = [];
let nextToken = null;
let pageCount = 0;
do {
console.log(`正在获取第 ${pageCount + 1} 页...`);
// 复制到的fetch 方法粘贴到这里
// const response = await fetch(xxxxx)
const response = await
const data = await response.json();
allData = allData.concat(data.data.files);
nextToken = data.data.nextToken;
pageCount++;
console.log(`已获取 ${allData.length} 个项目...\n`);
} while (nextToken);
// 按照 created_at 时间降序排序数据
allData.sort((a, b) => new Date(b.created_at) - new Date(a.created_at));
return allData;
}
fetchAllPagesWithProgress().then(data => {
fs.writeFileSync('output.json', JSON.stringify(data, null, 2));
console.log('数据已写入 output.json');
}).catch(error => {
console.error(error);
});
```
### 3、将复制到的```fetch```方法粘贴到js中
```js
const response = await fetch(`https://unicloud-api.dcloud.net.cn/unicloud/api/file/list?%2F&mode=DIRECTORY${nextToken ? `&nextToken=${nextToken}` : ''}`, {
headers: {
accept: 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
pragma: 'no-cache',
'sec-ch-ua': '"Google Chrome";v="123", "Not:A-Brand";v="8", "Chromium";v="123"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
token: 'token',
Referer: 'https://unicloud.dcloud.net.cn/',
'Referrer-Policy': 'strict-origin-when-cross-origin',
},
method: 'GET',
body: null,
});
```
### 4、改造fetch方法的url
将```&nextToken=```修改为:${nextToken ? `&nextToken=${nextToken}` : ''}`
将```pageSize=20```修改为: ```100```
### 5、npm i 安装axios、发起请求
** 插入的附件 **
** 插入的附件 **
# 1、进入需要删除的目录(```这一步很重要,用于确定要删除的根目录,别搞错了```。否则 ```rm -rf /``` 就G了)
[attach]136845... 显示全部 »
# 1、进入需要删除的目录(```这一步很重要,用于确定要删除的根目录,别搞错了```。否则 ```rm -rf /``` 就G了)
** 插入的附件 **
## 2、在```network``` 中找到```https://unicloud-api.dcloud.net.cn/unicloud/api/host/file-list```这个接口,右击 ```copy``` - ```Copy as Fetch```
** 插入的附件 **
## 2、创建一个js, 复制下方js
```
async function recursiveDelete(initialUrl, { headers: initialHeaders }) {
const urlParams = new URL(initialUrl).searchParams;
const commonParams = {
appid: urlParams.get('appid') || "",
provider: urlParams.get('provider') || "",
spaceId: urlParams.get('spaceId') || ""
};
const rootFolder = urlParams.get('folder');
async function makeRequest(url, options = {}) {
try {
const response = await fetch(url, {
headers: {
...initialHeaders,
'Content-Type': 'application/json;charset=UTF-8',
...options.headers
},
...options
});
return await response.json();
} catch (error) {
console.error(`请求错误:`, error.message);
return null;
}
}
function normalizePath(path) {
return path.startsWith('/') ? path.slice(1) : path;
}
async function deleteFile(file, folderPath) {
console.log('{ 【 folderPath 】 }:>>>>>>>>>>>> createFold.js:32', folderPath);
const normalizedPath = `${folderPath}${`/${folderPath}` === rootFolder ? '/' : ''}${file.name}`;
console.log(`尝试删除文件: ${normalizedPath}`);
const deleteResponse = await makeRequest('https://unicloud-api.dcloud.net.cn/unicloud/api/host/delete-file', {
method: 'POST',
body: JSON.stringify({ ...commonParams, fileId: file.id, filePath: normalizedPath })
});
if (deleteResponse?.ret === 0) {
console.log(`成功删除文件: ${normalizedPath}`);
return true;
}
console.error(`删除文件失败: ${normalizedPath},错误信息:${deleteResponse}`);
return false;
}
async function processFolder(folderUrl) {
console.log(`处理文件夹: ${folderUrl}`);
const listResponse = await makeRequest(folderUrl);
if (!listResponse || listResponse.ret !== 0) {
console.error(`无法列出文件夹内容: ${folderUrl}`);
return false;
}
const { directories, files } = listResponse.data;
const currentFolder = normalizePath(new URL(folderUrl).searchParams.get('folder'));
console.log(`文件夹 ${currentFolder} 包含 ${files.length} 个文件和 ${directories.length} 个子文件夹`);
await Promise.all(files.map(file => deleteFile(file, currentFolder)));
await Promise.all(directories.map(dir =>
processFolder(folderUrl.replace(/folder=[^&]+/, `folder=${encodeURIComponent(dir.prefix)}`))
));
await deleteFolderAttempt(currentFolder);
}
async function deleteFolderAttempt(folderPath) {
const normalizedPath = normalizePath(folderPath);
console.log(`尝试删除文件夹: ${normalizedPath}`);
const deleteResponse = await makeRequest('https://unicloud-api.dcloud.net.cn/unicloud/api/host/delete-directory', {
method: 'POST',
body: JSON.stringify({ ...commonParams, folder: normalizedPath })
});
if (deleteResponse && deleteResponse.ret === 0) {
console.log(`成功删除文件夹: ${normalizedPath}`);
} else {
console.log(`无法删除文件夹: ${normalizedPath},错误信息:${deleteResponse}`);
}
}
await processFolder(initialUrl);
console.log('递归删除过程完成');
}
```
## 3、将复制到的```fetch```方法粘贴到js中,并将```fetch```方法名修改为```recursiveDelete```
```
recursiveDelete("https://unicloud-api.dcloud.net.cn/unicloud/api/host/file-list?appid=&provider=alipay&spaceId=", {
"headers": {
"accept": "application/json, text/plain, */*",
"accept-language": "zh-CN,zh;q=0.9",
"cache-control": "no-cache",
"pragma": "no-cache",
"priority": "u=1, i",
"sec-ch-ua": "\"Chromium\";v=\"130\", \"Google Chrome\";v=\"130\", \"Not?A_Brand\";v=\"99\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"macOS\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"token": ""
},
"referrer": "https://unicloud.dcloud.net.cn/",
"referrerPolicy": "strict-origin-when-cross-origin",
"body": null,
"method": "GET",
"mode": "cors",
"credentials": "include"
});
```
## 5、执行此方法
```
node recursiveDelete.js
```
** 插入的附件 **
## 备注:为了验证这个脚本的可用性。可以先创建一个文件夹来测试。这里附上一个```shell```用于创建复杂嵌套的目录结构供参考
```
#!/bin/bash
# 设置基本参数
BASE_DIR="highly_complex_nested_structure"
MAX_DEPTH=7
MIN_DEPTH=2
MIN_FILES=1
MAX_FILES=5
MIN_FOLDERS=1
MAX_FOLDERS=5
MIN_SIBLING_FOLDERS=2
MAX_SIBLING_FOLDERS=5
# 创建基础目录
mkdir -p $BASE_DIR
cd $BASE_DIR
# 创建.gitignore文件
cat << EOF > .gitignore
*.log
*.tmp
.DS_Store
node_modules/
*.swp
EOF
generate_lorem_ipsum() {
local words=$1
curl -s "https://loripsum.net/api/1/short/plaintext" | tr -d '\n' | cut -d' ' -f1-$words | sed 's/$/\./'
}
create_random_file() {
local dir=$1
local file_type=$2
local filename
case $file_type in
"text")
filename=$(openssl rand -hex 8).txt
generate_lorem_ipsum 50 > "$dir/$filename"
;;
"markdown")
filename=$(openssl rand -hex 8).md
cat << EOF > "$dir/$filename"
# $(generate_lorem_ipsum 3)
## $(generate_lorem_ipsum 4)
$(generate_lorem_ipsum 20)
## $(generate_lorem_ipsum 4)
- $(generate_lorem_ipsum 5)
- $(generate_lorem_ipsum 5)
- $(generate_lorem_ipsum 5)
### $(generate_lorem_ipsum 3)
$(generate_lorem_ipsum 30)
EOF
;;
"json")
filename=$(openssl rand -hex 8).json
cat << EOF > "$dir/$filename"
{
"id": "$RANDOM",
"name": "$(generate_lorem_ipsum 2)",
"description": "$(generate_lorem_ipsum 10)",
"details": {
"category": "$(generate_lorem_ipsum 1)",
"tags": [
"$(generate_lorem_ipsum 1)",
"$(generate_lorem_ipsum 1)",
"$(generate_lorem_ipsum 1)"
],
"created_at": "$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
},
"is_active": $( (( RANDOM % 2 )) && echo "true" || echo "false" )
}
EOF
;;
"image")
filename=$(openssl rand -hex 8).svg
local colors=("red" "blue" "green" "yellow" "purple" "orange")
local color=${colors[$RANDOM % ${#colors[@]}]}
local shape=$((RANDOM % 3))
case $shape in
0) # Circle
cat << EOF > "$dir/$filename"
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<circle cx="50" cy="50" r="40" stroke="black" stroke-width="3" fill="$color" />
</svg>
EOF
;;
1) # Rectangle
cat << EOF > "$dir/$filename"
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<rect width="80" height="80" x="10" y="10" stroke="black" stroke-width="3" fill="$color" />
</svg>
EOF
;;
2) # Triangle
cat << EOF > "$dir/$filename"
<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">
<polygon points="50,10 10,90 90,90" stroke="black" stroke-width="3" fill="$color" />
</svg>
EOF
;;
esac
;;
esac
echo "Created $file_type file: $dir/$filename"
}
create_files_in_folder() {
local current_path=$1
local num_files=$((RANDOM % (MAX_FILES - MIN_FILES + 1) + MIN_FILES))
for ((i=1; i<=num_files; i++)); do
local file_type=$((RANDOM % 4))
case $file_type in
0) create_random_file "$current_path" "text" ;;
1) create_random_file "$current_path" "markdown" ;;
2) create_random_file "$current_path" "json" ;;
3) create_random_file "$current_path" "image" ;;
esac
done
# 随机创建隐藏文件或文件夹
if [ $((RANDOM % 4)) -eq 0 ]; then
if [ $((RANDOM % 2)) -eq 0 ]; then
local hidden_file=".hidden_file_$RANDOM"
generate_lorem_ipsum 20 > "${current_path}/${hidden_file}"
echo "Created hidden file: ${current_path}/${hidden_file}"
else
local hidden_folder=".hidden_folder_$RANDOM"
mkdir -p "${current_path}/${hidden_folder}"
create_files_in_folder "${current_path}/${hidden_folder}"
echo "Created hidden folder: ${current_path}/${hidden_folder}"
fi
fi
}
create_nested_structure() {
local current_depth=$1
local current_path=$2
local max_depth=$((MIN_DEPTH + RANDOM % (MAX_DEPTH - MIN_DEPTH + 1)))
if [ $current_depth -gt $max_depth ]; then
return
fi
# 确保当前文件夹有内容
create_files_in_folder "$current_path"
# 创建子文件夹并递归
local num_folders=$((RANDOM % (MAX_FOLDERS - MIN_FOLDERS + 1) + MIN_FOLDERS))
for ((i=1; i<=num_folders; i++)); do
local sub_folder="folder_${current_depth}_${i}"
local new_path="${current_path}/${sub_folder}"
mkdir -p "$new_path"
echo "Created folder: $new_path"
create_nested_structure $((current_depth + 1)) "$new_path"
done
# 创建平级文件夹
local num_sibling_folders=$((RANDOM % (MAX_SIBLING_FOLDERS - MIN_SIBLING_FOLDERS + 1) + MIN_SIBLING_FOLDERS))
for ((i=1; i<=num_sibling_folders; i++)); do
local sibling_folder="sibling_${current_depth}_${i}"
local sibling_path="${current_path}/${sibling_folder}"
mkdir -p "$sibling_path"
echo "Created sibling folder: $sibling_path"
create_files_in_folder "$sibling_path"
done
}
create_complex_structure() {
local base_path=$1
local num_main_branches=$((RANDOM % (MAX_SIBLING_FOLDERS - MIN_SIBLING_FOLDERS + 1) + MIN_SIBLING_FOLDERS))
for ((i=1; i<=num_main_branches; i++)); do
local branch_name="main_branch_${i}"
local branch_path="${base_path}/${branch_name}"
mkdir -p "$branch_path"
echo "Created main branch: $branch_path"
create_nested_structure 1 "$branch_path"
done
}
# 开始创建目录
create_complex_structure "."
```
问题2是支付宝云bug,数据库执行 _.unshift 会报错, 如果比较急,可以先把 _.unshift 改成 _.push 支付宝云预计1个月内会修复
问题2是支付宝云bug,数据库执行 _.unshift 会报错, 如果比较急,可以先把 _.unshift 改成 _.push 支付宝云预计1个月内会修复
uni-upgrade-center升级中心性价比评测 uni_upgrade_center 升级中心 uniCloud
BeforeMount2024-11-16 13:58 评论文章 • 1 个评论 • 1075 次浏览
quill-delta-converter 公共模块不存在,请在 uniCloud/database 目录右击“配置schema扩展公共模块“添加 quill-delta-converter 模块 uniCloud
咸虾米2024-11-15 09:44 发表文章 • 0 个评论 • 37 次浏览
uniCloud 三个云厂商的功能差异汇总,持续更新中 uniCloud
重生之我是码农2024-10-31 11:49 发表文章 • 0 个评论 • 170 次浏览
uni-app的app和web平台定位异常;uni-app已支持鸿蒙next;uni-app x 3端发布;uniCloud阿里云版Nodejs8终止支持;oppo商店误报广告 鸿蒙 uniCloud
czdwlai2024-10-22 15:12 评论文章 • 93 个评论 • 28091 次浏览
使用uniCloud 【服务空间套餐: 开发者版 】 读操作使用量 RU 上限问题 uniCloud
1***@qq.com2024-10-07 20:44 评论文章 • 6 个评论 • 1324 次浏览
clientDB联表查询策略优化调整公告 uniCloud clientDB
2***@qq.com2024-09-26 15:56 评论文章 • 55 个评论 • 13895 次浏览
unicloud之前运行好好的,但是突然访问云函数失败,报错FaasError: request has expired uniCloud uniapp
3***@qq.com2024-09-10 13:12 发表文章 • 0 个评论 • 86 次浏览
uniCloud 外部系统联登 注册功能 C# 完整示例 uniCloud
DCloud_uniCloud_CRL2024-08-08 15:06 评论文章 • 1 个评论 • 184 次浏览
公告:阿里云服务空间清理通知 uniCloud
DCloud_云服务_moyang2024-06-05 11:29 评论文章 • 151 个评论 • 34912 次浏览
关于unicloud账号 短信的等问题 uniCloud 短信
友善的程序员2024-05-16 18:04 发表文章 • 0 个评论 • 192 次浏览
unicloud-db的动态多条件and查询 indexedDB uniCloud
3***@qq.com2024-04-24 12:55 评论文章 • 3 个评论 • 975 次浏览