发送一份;二进制文件;和AngularJS

发送一份;二进制文件;和AngularJS,angularjs,cordova,imgur,Angularjs,Cordova,Imgur,我正在尝试使用AngularJS从我的cordova应用程序上传一个“二进制文件” 但是我不确定我应该如何格式化我的请求,以及“二进制文件”的格式是什么。据我所知,二进制文件是任何不是纯文本的东西 这是我从本地文件系统获取文件数据的方式。它返回一个blob实例。这部分很好用 var request = { 'url': 'file:///my/path/tmp/cdv_photo_025.png', 'options': { 'responseType': 'blob' // a

我正在尝试使用AngularJS从我的cordova应用程序上传一个“二进制文件”

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

这是我从本地文件系统获取文件数据的方式。它返回一个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);

对于使用Imgur API的图像上传请求,您不能简单地将
客户端ID
包含在标题中。如果您改为请求公共只读信息,那么这就足够了

如果还没有,请参阅Imgur API文档中的

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

https://api.imgur.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=access_token
然后,一旦您获得访问令牌,请确保您的上载请求使用它:

'Authorization': 'Bearer access_token'

此外,只需将blob数据用作请求的参数(即,不要用
图像
类型
属性包装它)。

谢谢您的回复。我接受了你的建议,直接传递blob数据,这很有效!关于访问令牌,如果我没有将内容直接上传到帐户,那么我不需要使用它,因此
客户端ID
就足够了,可以正常工作。不要编辑问题来添加答案:只要在下面添加你自己的问题就行了。