如何使用ImgUr NPM包将上传的图片添加到指定相册?
问题分析
你当前的实现存在两个核心问题:
- 直接修改
getAlbum返回的本地数据不会同步到ImgUr服务器,必须调用官方API完成相册更新 getAlbum的参数要求是相册ID而非名称,用相册名称调用无法正确获取目标相册
正确实现方式
方案一:上传时直接指定相册(推荐,减少API请求)
先获取名为HelloWorld的相册ID,上传图片时直接关联该相册,完成后图片自动进入目标相册:
export async function uploadToImgUr(files: Buffer[]): Promise<string[]> { // 获取当前账号下名为HelloWorld的相册ID const albums = await client.getAccountAlbums(); const targetAlbum = albums.data.find(album => album.title === 'HelloWorld'); if (!targetAlbum) { throw new Error('名为HelloWorld的相册不存在,请先创建'); } const albumId = targetAlbum.id; // 批量上传图片并指定目标相册 const uploadPromises = files.map(async (file) => { const response = await client.upload({ image: file, type: 'stream', album: albumId // 上传时绑定相册 }); return response.data.link; }); return Promise.all(uploadPromises); }
方案二:上传后批量添加到相册
若需先完成图片上传再统一添加到相册,可调用addAlbumImages方法批量操作:
export async function uploadToImgUr(files: Buffer[]): Promise<string[]> { // 获取目标相册ID const albums = await client.getAccountAlbums(); const targetAlbum = albums.data.find(album => album.title === 'HelloWorld'); if (!targetAlbum) { throw new Error('名为HelloWorld的相册不存在,请先创建'); } const albumId = targetAlbum.id; // 上传图片并收集图片ID const uploadResults = await Promise.all(files.map(async (file) => { const response = await client.upload({ image: file, type: 'stream' }); return { link: response.data.link, id: response.data.id // 保存图片ID用于后续添加 }; })); // 批量将图片添加到相册 const imageIds = uploadResults.map(result => result.id); await client.addAlbumImages(albumId, imageIds); return uploadResults.map(result => result.link); }
注意事项
- 确保ImgUr客户端已配置正确的授权信息,需拥有相册修改权限
- 若
HelloWorld相册未创建,可先调用client.createAlbum({ title: 'HelloWorld' })完成创建 - 批量操作时优先选择方案一,可减少API请求次数提升效率
内容的提问来源于stack exchange,提问作者Franva
相关产品推荐
相关产品推荐

