代码之家  ›  专栏  ›  技术社区  ›  JM-AGMS

用AngularJS发送“二进制文件”

  •  0
  • JM-AGMS  · 技术社区  · 7 年前

    我正试图从我的cordova应用程序上传一个“二进制文件”到 imgur.com REST API

    但是我不确定我应该如何格式化我的请求,以及“二进制文件”的格式是什么。据我所知,二进制文件是任何不是纯文本的东西。

    这就是我从本地文件系统获取文件数据的方式。它返回一个blob实例。这部分很好用。

    var request = {
      'url': 'file:///my/path/tmp/cdv_photo_025.png',
      'options': {
        'responseType': 'blob' // also tried 'arraybuffer', no diff.
      }
    }
    var handler = function(response) {
      window.myBlobData = response.data;
      // handles the response
    }
    $http.get(request.url, request.options).then(handler);
    

    后来,我用它将blob上传到imgur,但这不起作用。我收到了400(错误的请求)。我假设是内容类型,禁用自动编码AngularJS与 transformRequest ,当然还有二进制数据:

    var request = {
      'url': 'https://api.imgur.com/3/upload',
      'options': {
        'headers': {
          'Authorization': 'Client-ID ***********',
          'Content-Type': 'application/octet-stream',
        },
        'transformRequest': []
      },
      'data': {
        'image': window.myBlobData, // a binary file
        'type': 'image/png'
      }
    }
    var handler = function(response) {
      // handles the response
    }
    $http.post(request.url, request.data, request.options).then(handler);
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   miqh    7 年前

    对于带有Imgur的API的图像上传请求,不能简单地包含 Client-ID 在标题中。如果你要求公开只读信息,那就足够了。

    如果您还没有,请参阅 section on authorization 在Imgur API文档中。

    基本上,您需要为您将代表其上载图像的用户获取访问令牌。根据文档的建议,您需要重定向或打开一个弹出窗口到下面的URL。

    https://api.imgur.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=access_token
    

    然后,一旦您获得了访问令牌,请确保您的上载请求使用它:

    'Authorization': 'Bearer access_token'
    

    image type 属性)。