Http-ошибка при https://api.imgur.com/3/image - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь загрузить изображение imgur в кодировке 64, и оно продолжает сбой с сообщением об ошибке 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 ]

1 голос
/ 23 марта 2019

Скорее всего, вы передаете неправильный токен доступа.
Вот код, который у меня работал нормально:

  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

См. быстрый пример здесь

1 голос
/ 23 марта 2019

вы неправильно устанавливаете заголовки: вам нужно использовать set или append, так как объект неизменен.

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

Скорее всего, вы видите в своем браузере, что ваш заголовок аутентификации не отправлен.

...