You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用ImgUr npm包上传图片至自有专辑提示非所有者,如何修复?

解决ImgUr上传自有专辑权限问题

问题核心原因

你遇到的报错本质是两个权限验证问题:

  1. 上传自有专辑不能用公开的专辑ID(如xbvhXo),必须使用专辑的deletehash——这是ImgUr唯一认可的、用于授权修改专辑的标识;
  2. 仅靠Client ID和Client Secret只能获取应用级权限,无法操作用户私有/自有专辑,必须通过OAuth2流程获取用户授权的access token,证明你是专辑所有者。

修复步骤

1. 获取专辑的deletehash

  • 登录ImgUr账号,打开目标专辑页面;
  • 按下F12打开浏览器开发者工具,切换到「Network」标签后刷新页面;
  • 找到请求路径包含/album/xbvhXo的API请求,查看响应内容,提取deletehash字段值。

2. 获取用户授权的Access Token

需要通过OAuth2授权证明你是账号所有者:

  • 进入ImgUr应用设置页,配置正确的重定向URI(比如你的Next.js应用回调地址:http://localhost:3000/api/imgur-callback);
  • 访问授权URL(替换成你的Client ID和重定向URI):
    https://api.imgur.com/oauth2/authorize?client_id=你的ClientID&response_type=code&redirect_uri=你的重定向URI
    
  • 登录账号并授权应用,跳转后从URL的code参数中获取授权码;
  • 发送POST请求到https://api.imgur.com/oauth2/token,参数如下:
    client_id: 你的ClientID
    client_secret: 你的ClientSecret
    grant_type: authorization_code
    code: 刚获取的授权码
    redirect_uri: 你的重定向URI
    
  • 从响应中提取access_token和refresh_token,将access_token存入项目环境变量。

3. 修改上传代码

更新客户端初始化逻辑,替换专辑参数为deletehash,并加入access token:

const albumDeleteHash = process.env.IMGUR_ALBUM_DELETEHASH; // 替换为你的专辑deletehash
const client = new ImgurClient({ 
    clientId: process.env.IMGUR_CLIENT_ID,
    clientSecret: process.env.IMGUR_CLIENT_SECRET,
    accessToken: process.env.IMGUR_ACCESS_TOKEN, // 新增授权后的access token
 });
export async function uploadToImgUr(imgData: APImageData | Buffer[]): Promise<string[]> {
    let files: Buffer[];
    let album: string | undefined = albumDeleteHash;
    let name: string | undefined;
    let title: string | undefined;
    let description: string | undefined;

    if(Array.isArray(imgData)) {
        files = imgData;
    } else {
        files = imgData.files;
        album = imgData.album ? imgData.album : albumDeleteHash;
        name = imgData.name;
        title = imgData.title;
        description = imgData.description;
    }

    const uploadPromises = files.map(async (file) => {
        const response = await client.upload({
            image: file,
            type: 'stream',
            album: album,
            name: name,
            title: title,
            description: description,
        });

        return response.data.link;
    });

    return Promise.all(uploadPromises);
}

补充提示

  • deletehash属于敏感信息,不要公开泄露,建议存入环境变量管理;
  • 若access token过期,用refresh token可重新获取新的token,无需用户再次授权。

内容的提问来源于stack exchange,提问作者Franva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 04:55:37