[]]
在众多场合,我们得对用户在客户端上传的文件执行一系列操作,诸如进行裁剪、压缩、添加水印等。
云托管的对象存储服务并未整合文件处理的功能模块,若我们计划自行开发一个服务以实现这一功能,那么操作流程应当是怎样的呢?
过程演化
鉴于请求的尺寸存在上限,因此直接将文件或图片通过请求传递至服务端并不可行,为此,我们可以借助对象存储作为中转环节,具体操作步骤如下:
在程序中,将文件上传至目标存储后,该请求将文件信息传递给文件处理服务。该服务首先读取目标存储中的文件,随后进行相应的处理。处理完毕后,将处理过的文件重新上传至目标存储。接着,获取由另一服务上传的文件,并将其返回给小程序。小程序随后根据下载的文件,在前端界面进行代码展示。
我们编制了一个服务程序,该程序能够将用户上传的图片统一转换为webp格式,并且提供转换后的webp格式图片的链接。
使用COS-SDK进行服务的上传与下载操作,能够提供极具价值的参考依据。
项目仓库:
需要注意,此服务需要开启开放接口服务
小程序中的调用代码如下:
Page({
async onLoad() {

wx
.cloud
.init({
env: '云托管环境ID'
})
wx
.chooseImage({
count: 1,
async success(res) {
console
.log('开始上传文件',res
.tempFilePaths
[0])
const { fileID
} = await wx
.cloud
.uploadFile({
cloudPath: 'test.png',
filePath: res
.tempFilePaths
[0]
})
console
.log('上传成功,开始转换',fileID
)
const info
= await wx
.cloud
.callContainer({
path: '/made',
method: 'GET',
data:{
fileid:fileID
},
header: {
'X-WX-SERVICE': 'img',
}
});
console
.log('转换完毕',info
.data
);
if(info
.data
.code
===0){
console
.log('开始下载转换文件',info
.data
.fileid
);
const downfile
= await wx
.cloud
.downloadFile({
fileID:info
.data
.fileid
})
wx
.previewImage({
urls: [downfile
.tempFilePath
],
})
}
}
})
}
})
总结
项目展示中的图像处理部分可以替换为任何其他流程,同时需自行调整相关依赖及代码结构。
关键在于确保服务端准确下载文件,并且经过处理的文件能够被成功上传,进而被小程序或H5平台所访问。