HarmonyOS鸿蒙Next中如何实现在云函数里面进行上传图片的功能,有没有云函数操作云存储的案例以及应该怎么配置???
HarmonyOS鸿蒙Next中如何实现在云函数里面进行上传图片的功能,有没有云函数操作云存储的案例以及应该怎么配置??? 【问题描述】:我们现在有一个端云一体的需求,需要实现的功能是在云函数里面进行上传图片,应该怎么配置环境以及有没有云函数操作云存储的代码案例???
【问题现象】:尝试使用npm和ohpm安装都报错
【复现代码段】:



更多关于HarmonyOS鸿蒙Next中如何实现在云函数里面进行上传图片的功能,有没有云函数操作云存储的案例以及应该怎么配置???的实战教程也可以访问 https://www.itying.com/category-93-b0.html
麻烦问下,您这边截图中的库是什么资料提供的。
【解决方案】
1、在通用云开发模板工程中,端侧“pages”目录下的ets页面文件代码实现了在端侧调用云侧代码。您可以参考这些文件内的代码实现,在自己的代码文件中进行开发。开发端侧工程的具体流程参见文档:
2、当前有云开发三四方库也可以参考:[@hw-agconnect/cloud(V1.0.2)](https://ohpm.openharmony.cn/#/cn/detail/@hw-agconnect%2Fcloud)
更多关于HarmonyOS鸿蒙Next中如何实现在云函数里面进行上传图片的功能,有没有云函数操作云存储的案例以及应该怎么配置???的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
一、环境配置步骤
-
创建端云一体化工程 12 在DevEco Studio中选择云开发模板(如“Cloud DB”或“Cloud Functions”),根据向导创建包含云侧和端侧模块的工程12。
-
开通云存储服务 在AppGallery Connect控制台:
- 进入项目 → 选择您的应用 → 在“Serverless”菜单中开通云存储服务。
- 创建存储实例(默认生成名为
agc-cloudstorage的桶)。
-
配置云函数权限 在云函数代码中需声明云存储权限:
// cloudfunctions/your-function/package.json { "dependencies": { "@agconnect/storage-server": "^1.0.0" // 必须添加此依赖 } }
二、云函数操作云存储代码示例
以下代码展示在云函数中接收端侧上传的图片文件,并保存至云存储(直接引用检索信息中的核心逻辑):
// 云函数代码(cloudfunctions/your-function/index.js)
import cloud from '@agconnect/cloud-server';
import storage from '@agconnect/storage-server';
export default async function (event) {
// 1. 获取端侧上传的文件数据(需按检索信息要求解析body)
let body = event.body ? JSON.parse(event.body) : event;
const { fileName, fileData } = body; // fileData为Base64编码的图片数据
// 2. 初始化云存储
const storageInstance = storage.storage();
const storagePath = `images/${fileName}`; // 存储路径
// 3. 将Base64转为Buffer并上传
try {
const buffer = Buffer.from(fileData, 'base64');
await storageInstance.uploadFile({
path: storagePath,
buffer,
mimeType: 'image/jpeg' // 根据实际类型修改
});
// 4. 返回文件访问URL
const downloadURL = await storageInstance.getDownloadUrl({
path: storagePath
});
return {
code: 0,
url: downloadURL
};
} catch (error) {
return { code: 500, message: "Upload failed: " + error.message };
}
}
三、关键注意事项(来自检索信息)
-
端侧文件预处理 端侧上传前需将图片复制到应用缓存目录(参考检索信息要求):
// 端侧代码示例 import fs from '@ohos.file.fs'; import cloudStorage from '@agconnect/cloudstorage'; async function uploadImage() { const cacheDir = globalThis.context.cacheDir; // 获取缓存路径 const localPath = `${cacheDir}/test.jpg`; // 格式:internal://cache/test.jpg // ...(将图片复制到localPath后再调用云函数) } -
用户认证强制要求 必须在端侧登录认证(否则云存储会拒绝操作):
import auth from '@agconnect/auth'; async function signIn() { await auth.getCurrentUser().signIn(); // 未登录用户需先调用此方法 } -
本地调试限制
- 仅支持真机调试(不支持模拟器)
- 云函数本地运行时需在通知栏确认
Cloud Functions loaded successfully状态2 - 本地调用地址格式:
http://localhost:端口号(端口号在DevEco Studio控制台查看)
1、端侧调用云存储直接上传图片:
import { cloudStorage } from '@kit.CloudFoundationKit';
import { BusinessError, request } from '@kit.BasicServicesKit';
const bucket: cloudStorage.StorageBucket = cloudStorage.bucket();
bucket.uploadFile(getContext(this), {
localPath: cacheFilePath,
cloudPath: cloudPath,
}).then(task => {
// add task event listener
this.addEventListener(task, this.onUploadCompleted(cloudPath, cacheFilePath));
// start task
task.start();
}).catch((err: BusinessError) => {
hilog.error(HILOG_DOMAIN, TAG, 'uploadFile failed, error code: %{public}d, message: %{public}s',
err.code, err.message);
this.isUploading = false;
});
- 使用云存储功能,需要获取用户凭据。请确保您已配置AccessToken。
在HarmonyOS Next中,云函数操作云存储(如上传图片)主要通过Cloud Storage服务实现。以下是关键步骤和配置要点:
1. 环境配置
- 开通服务:在AppGallery Connect中为项目开通Cloud Storage服务。
- 配置依赖:在云函数的
package.json中声明依赖,使用官方SDK:"dependencies": { "@hw-agconnect/cloudstorage-server": "^1.0.0" } - 安装依赖:在云函数目录下执行
npm install(确保网络环境正常,避免使用ohpm安装云函数依赖)。
2. 云函数代码案例(上传图片)
以下示例演示通过云函数将Base64格式的图片上传至Cloud Storage:
const cloudStorage = require('@hw-agconnect/cloudstorage-server').cloudStorage;
exports.main = async function (context) {
try {
// 1. 获取Base64图片数据(从请求参数中解析)
const { imageBase64, fileName } = context.request.body;
// 2. 初始化存储实例
const storage = cloudStorage.getInstance(context.agc);
const storageReference = storage.reference().child(`images/${fileName}`);
// 3. 将Base64转换为Buffer并上传
const buffer = Buffer.from(imageBase64, 'base64');
await storageReference.put(buffer, {
contentType: 'image/jpeg', // 根据实际格式调整
metadata: { customMetadata: { source: 'cloud-function' } }
});
// 4. 获取文件下载URL
const downloadURL = await storageReference.getDownloadURL();
return { code: 0, data: { url: downloadURL } };
} catch (error) {
return { code: 500, message: `上传失败: ${error.message}` };
}
};
3. 关键配置说明
- 权限配置:在
agconnect-services.json中确保Cloud Storage权限已启用。 - 安全规则:若需公开访问,可在Cloud Storage控制台配置安全规则:
{ "rules": { "images/{file}": { "read": true, "write": true } } } - 触发方式:云函数可通过HTTP触发器调用,客户端将图片以Base64格式通过POST请求传递。
4. 注意事项
- 图片大小需符合Cloud Storage限制(单文件通常不超过10GB)。
- 上传前可校验文件类型,避免非图片文件传入。
- 生产环境建议添加身份验证逻辑,通过
context.request.user校验用户权限。
5. 错误排查
- 若
npm install报错,检查网络代理或切换npm镜像源。 - 确保云函数本地调试时使用正确的
agconnect-services.json文件。 - 上传失败时查看云函数日志,定位SDK初始化或权限问题。
通过以上配置和代码,即可在HarmonyOS Next云函数中实现图片上传至Cloud Storage的功能。


