【问题标题】:Downloading a file using Dart GDrive api with authorized GET request通过授权的 GET 请求使用 Dart GDrive api 下载文件
【发布时间】:2014-05-18 08:02:03
【问题描述】:

我在 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 不允许方法请求。

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

更新:在 Günter Zö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);
}

【问题讨论】:

    标签: dart dart-html


    【解决方案1】:

    正如错误消息所说,request 不是有效的 HTTP 方法。 你需要类似GETPUTPOSTDELETE、...

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

    【讨论】:

    • 好的。我从 Dart 文档中得到了“请求”。它还列出了其他三个。我只是不知道该放什么,因为我对这个领域的了解有限。
    • 您是否使用“GET”之类的具体方法取得了进展?
    • 这对 Günter Zöchbauer 有效。使用 GET 修复了错误。然后我能够转换返回的 blob 并显示图像:
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2020-10-18
    • 2021-05-21
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多