使用具有授权GET请求的Dart GDrive api下载文件

时间:2014-04-06 02:37:44

标签: dart dart-html

我在Dart编码,需要使用OAuth2.0从google GDrive下载文件(即图像文件)。我使用Dart drive_v2_api_browser客户端库后,在我的代码中获得了downloadURL。

我尝试直接将其传递给“ src ”属性

_image = new ImageElement(src: file.downloadUrl, width: file.imageMediaMetadata.width, height: file.imageMediaMetadata.height);
_image.onLoad.listen(onData, onError: onError, onDone: onDone, cancelOnError: true);

但是这产生了403禁止错误。那时我意识到我需要制作一个“授权的 GET 请求”。所以我尝试按照Dart Auth pub包https://pub.dartlang.org/packages/google_oauth2_client上列出的示例进行操作,但我不明白它的要求。

这就是我的尝试:

var auth = new oauth.SimpleOAuth2(_picker.Token.data);
var request = new HttpRequest();
request.onLoad.listen(onData_Request, onError: onError_Request, onDone: onDone_Request, cancelOnError: true);
request.open("request", file.downloadUrl);
auth.authenticate(request).then((request) => request.send());

但它一直给我一个错误:

token .... Access-Control-Allow-Methods不允许使用方法请求。

有没有人有一个相对于OAuth2.0通过Dart GDrive api下载文件的工作示例?

更新:在GünterZöchbauer帮助之后,我能够继续并转换blob:

将此行添加到请求对象:

_downloadRequest.responseType = "blob";

允许我使用文件阅读器:

void onData_Request(Event e) {
  Blob response = _downloadRequest.response;
  final FileReader reader = new FileReader();

  reader.onLoad.listen((e) {
        _handleData(reader);
      });
  reader.readAsArrayBuffer(response);
}

void _handleData(FileReader reader) {
  Uint8List uintlist = new Uint8List.fromList(reader.result);
  String charcodes = new String.fromCharCodes(uintlist);
  _loadImage(_image, charcodes, 225, 225);
}

void _loadImage(ImageElement imageE, String data, int iWidth, int iHeight) {
  _imageAsbase64 = window.btoa(data);

 _image = new ImageElement(src: "data:image/png;base64," + _imageAsbase64, width: iWidth, height: iHeight);
 _image.onLoad.listen(onData, onError: onError, onDone: onDone, cancelOnError: true);
}

void onData(Event e) {
  print("success: ");
  _context.drawImage(_image, 0, 0);
}

1 个答案:

答案 0 :(得分:1)

由于错误消息显示request不是有效的HTTP方法。 您需要GETPUTPOSTDELETE等内容,...

另见http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html