https://api.imgur.com/3/image的Http失败响应

时间:2019-03-23 01:07:10

标签: angular imgur

我正在尝试将基数为64的编码图像上载到imgur,但它始终失败,并显示错误消息Http failure response for https://api.imgur.com/3/image: 403 OK。我该如何解决?

@Injectable()
export class ImgurService {
  private readonly IMGUR_UPLOAD_URL = 'https://api.imgur.com/3/image';
  private readonly IMGUR_API_KEY = '<api-key-xxxx>';

  constructor(
    private logger: NGXLogger,
    private http: HttpClient
  ) {
  }

  upload(b64Image: any) {
    this.logger.debug('Handling file input');
    this.logger.debug(image);
    this.logger.debug(`Uploading picture to ${this.IMGUR_UPLOAD_URL}`);
    const httpOptions = {
      headers: new HttpHeaders ({
        'Authorization': `Bearer ${this.IMGUR_API_KEY}`,
      }),
    };
    const formData = new FormData();
    formData.append('image', b64Image);
    formData.append('album', 'profile');
    return this.http.post<ImgurResponse>(`${this.IMGUR_UPLOAD_URL}`, formData, httpOptions);
  }
}

响应:

error:
data: {error: "The access token provided is invalid.", request: "/3/image", method: "POST"}
status: 403
success: false
__proto__: Object
headers: HttpHeaders
lazyInit: ƒ ()
lazyUpdate: null
normalizedNames: Map(0) {}
__proto__: Object
message: "Http failure response for https://api.imgur.com/3/image: 403 OK"
name: "HttpErrorResponse"
ok: false
status: 403
statusText: "OK"
url: "https://api.imgur.com/3/image"
__proto__: HttpResponseBase

2 个答案:

答案 0 :(得分:1)

您没有正确设置标题:您需要使用set或append,因为对象是不可变的。

let headers = new HttpHeaders();
headers = headers.set('Authorization', 'Bearer ${this.IMGUR_API_KEY}');

您很有可能在浏览器中看到未发送您的身份验证标头。

答案 1 :(得分:1)

很可能您传递了错误的访问令牌。
这是一个对我来说很好的代码:

  uploadImage(b64Image: string): Observable<Object> {
    let headers = new HttpHeaders({ 'Authorization': `Bearer ${this.IMGUR_ACCESS_TOKEN}` });

    return this.httpClient.post(this.IMGUR_UPLOAD_URL, b64Image, { headers: headers });
  }

当我给出一个随机的不存在的访问令牌时,我也会得到403,就像这样:
enter image description here

查看快速示例here