程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中?

开发过程中遇到Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中的问题如何解决?下面主要结合日常开发的经验,给出你关于Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中的解决方法建议,希望对你解决Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中有所启发或帮助;

我正在尝试创建一个与 Google Drive API 交互的简单 Flutter 应用程序。 通过 Google Sign In 包进行身份验证非常有效,因此我可以访问正确的标头和身份验证令牌。

然而,我不明白的是,尽管尝试了不同的方法并上下阅读驱动器文档 - 我如何通过 http 请求与 API 交互,例如通过 dio 或通过 dart/Flutter 中的“标准”方式?

举一个例子:我想上传一张用户选择的图片。我已经弄清楚了一切(文件路径、身份验证令牌等),但是 http 请求是什么样的?

这是“裸”的 http 请求:

@H_476_11@map headers = await user.currentUser.authheaders;

var formData = FormData.fromMap({
    'name': filePath,'file': multipartfile.fromBytes(fileData,filename: filePath)
  });

var response = await dio().post(
      'https://www.GoogleAPIs.com/upload/drive/v3/files?uploadType=media',data: formData,options: Options(headers: headers));

  print(responsE);

这可能是一个非常平凡/微不足道的问题,但我就是想不通..

在此先感谢您的帮助! 克里斯蒂安

解决方法

您需要先创建文件,然后将文件数据上传到其中。

我将使用 http 插件而不是 DIO。但同样的过程应该适用于 dio。

第一步:在文件夹中创建文件元数据

Future<String> createFile({File image,String folderID}) async {
  String accessToken = await Prefs.getToken();
  Map body = {
    'name': 'name.jpg','description': 'Newly created file','mimeType': 'application/octet-stream','parents': ['$folderId']
  };
  var res = await http.post(
    'https://www.googleapis.com/drive/v3/files',headers: {
      'Authorization': 'Bearer $accessToken','Content-Type': 'application/json; charset=UTF-8'
    },body: jsonEncode(body),);
  if (res.statusCode == 200) {
    // Extract the ID of the file we just created so we 
    // can upload file data into it
    String filEID = jsonDecode(res.body)['id'];
    // Upload the content into the empty file
    await uploadImageToFile(image,filEID);
    // Get file (downloadablE) link and use it for anything
    String link = await getFileLink(filEID);
    return link;
  } else {
    Map json = jsonDecode(res.body);
    throw ('${json['error']['message']}');
  }
}

第二步:上传图片数据到空文件

Future uploadImageToFile(File image,String id) async {
  String accessToken = await Prefs.getToken();
  String mimeType = mime(basename(image.path).toLowerCase());
  print(mimeTypE);
  var res = await http.patch(
    'https://www.googleapis.com/upload/drive/v3/files/$id?uploadType=media',body: image.readAsBytesSync(),'Content-Type': '$mimeType'
    },);
  if (res.statusCode == 200) {
    return res.body;
  } else {
    Map json = jsonDecode(res.body);
    throw ('${json['error']['message']}');
  }
}

第三步:获取可下载的文件链接(存储在数据库中或用于任何东西)

Future getFileLink(String id) async {
  String accessToken = await Prefs.getToken();
  var res = await http.get(
    'https://www.googleapis.com/drive/v3/files/$id?fields=webContentLink',);
  if (res.statusCode == 200) {
    Map json = jsonDecode(res.body);
    String link = json['webContentLink'];
    return link.split('&')[0];
  } else {
    Map json = jsonDecode(res.body);
    throw ('${json['error']['message']}');
  }
}

大佬总结

以上是大佬教程为你收集整理的Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中全部内容,希望文章能够帮你解决Google Drive API:使用 http 请求上传和创建文件夹,例如在带有 Flutter 的 DIO 中所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。