Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter GoogleDriveAPI:上传和创建带有http请求的文件夹,例如在DIO中使用Flatter_Flutter_Dart_Google Api_Google Drive Api_Dio - Fatal编程技术网

Flutter GoogleDriveAPI:上传和创建带有http请求的文件夹,例如在DIO中使用Flatter

Flutter GoogleDriveAPI:上传和创建带有http请求的文件夹,例如在DIO中使用Flatter,flutter,dart,google-api,google-drive-api,dio,Flutter,Dart,Google Api,Google Drive Api,Dio,我正在尝试创建一个简单的颤振应用程序,它可以与GoogleDriveAPI交互。 通过Google登录包进行身份验证非常有效,因此我可以访问正确的头和身份验证令牌 然而,我不明白的是,尽管尝试了不同的方法并上下阅读了驱动器文档,但我如何通过http请求与API交互,例如通过Dio或通过dart/FLUTER中的“标准”方式 举个例子:我想上传一张用户挑选的图片。我已经弄清楚了一切(文件路径、身份验证令牌等),但是http请求是什么样子的呢 以下是“裸”http请求: Map headers =

我正在尝试创建一个简单的颤振应用程序,它可以与GoogleDriveAPI交互。 通过Google登录包进行身份验证非常有效,因此我可以访问正确的头和身份验证令牌

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

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

以下是“裸”http请求:

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);
这可能是一个非常平凡/琐碎的问题,但我就是想不出来

提前感谢您的帮助!
Christian

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

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

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

Future createFile({File image,String folderId})异步{
String accessToken=wait Prefs.getToken();
地图正文={
'name':'name.jpg',
'说明':'新创建的文件',
“mimeType”:“应用程序/八位字节流”,
“家长”:[“$folderId”]
};
var res=wait http.post(
'https://www.googleapis.com/drive/v3/files',
标题:{
“授权”:“持有人$accessToken”,
“内容类型”:“应用程序/json;字符集=UTF-8”
},
正文:jsonEncode(正文),
);
如果(res.statusCode==200){
//提取我们刚刚创建的文件的ID,以便
//可以将文件数据上传到其中
字符串fileId=jsonDecode(res.body)['id'];
//将内容上载到空文件中
等待上传ImageToFile(图像,文件ID);
//获取文件(可下载)链接并将其用于任何用途
字符串链接=等待getFileLink(fileId);
返回链接;
}否则{
Map json=jsonDecode(res.body);
抛出(“${json['error']['message']}”);
}
}
第二步:将图像数据上传到空文件中

Future uploadImageToFile(文件映像,字符串id)异步{
String accessToken=wait Prefs.getToken();
字符串mimeType=mime(basename(image.path.toLowerCase());
打印(mimeType);
var res=wait http.patch(
'https://www.googleapis.com/upload/drive/v3/files/$id?上传类型=媒体',
正文:image.readAsBytesSync(),
标题:{
“授权”:“持有人$accessToken”,
“内容类型”:“$mimeType”
},
);
如果(res.statusCode==200){
返回实体;
}否则{
Map json=jsonDecode(res.body);
抛出(“${json['error']['message']}”);
}
}
第三步:获取可下载文件链接(存储在数据库中或用于任何用途)

未来getFileLink(字符串id)异步{ String accessToken=wait Prefs.getToken(); var res=wait http.get( 'https://www.googleapis.com/drive/v3/files/$id?字段=webContentLink', 标题:{ “授权”:“持有人$accessToken”, “内容类型”:“应用程序/json;字符集=UTF-8” }, ); 如果(res.statusCode==200){ Map json=jsonDecode(res.body); String link=json['webContentLink']; 返回链接.拆分('&')[0]; }否则{ Map json=jsonDecode(res.body); 抛出(“${json['error']['message']}”); } }
您需要先创建文件,然后将文件数据上载到其中

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

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

Future createFile({File image,String folderId})异步{
String accessToken=wait Prefs.getToken();
地图正文={
'name':'name.jpg',
'说明':'新创建的文件',
“mimeType”:“应用程序/八位字节流”,
“家长”:[“$folderId”]
};
var res=wait http.post(
'https://www.googleapis.com/drive/v3/files',
标题:{
“授权”:“持有人$accessToken”,
“内容类型”:“应用程序/json;字符集=UTF-8”
},
正文:jsonEncode(正文),
);
如果(res.statusCode==200){
//提取我们刚刚创建的文件的ID,以便
//可以将文件数据上传到其中
字符串fileId=jsonDecode(res.body)['id'];
//将内容上载到空文件中
等待上传ImageToFile(图像,文件ID);
//获取文件(可下载)链接并将其用于任何用途
字符串链接=等待getFileLink(fileId);
返回链接;
}否则{
Map json=jsonDecode(res.body);
抛出(“${json['error']['message']}”);
}
}
第二步:将图像数据上传到空文件中

Future uploadImageToFile(文件映像,字符串id)异步{
String accessToken=wait Prefs.getToken();
字符串mimeType=mime(basename(image.path.toLowerCase());
打印(mimeType);
var res=wait http.patch(
'https://www.googleapis.com/upload/drive/v3/files/$id?上传类型=媒体',
正文:image.readAsBytesSync(),
标题:{
“授权”:“持有人$accessToken”,
“内容类型”:“$mimeType”
},
);
如果(res.statusCode==200){
返回实体;
}否则{
Map json=jsonDecode(res.body);
抛出(“${json['error']['message']}”);
}
}
第三步:获取可下载文件链接(存储在数据库中或用于任何用途)

未来getFileLink(字符串id)异步{ String accessToken=wait Prefs.getToken(); var res=wait http.get( 'https://www.googleapis.com/drive/v3/files/$id?字段=webContentLink', 标题:{ “授权”:“持有人$accessToken”, “内容类型”:“应用程序/json;字符集=UTF-8” }, ); 如果(res.statusCode==200){ Map json=jsonDecode(res.body); String link=json['webContentLink']; 返回链接.拆分('&')[0]; }否则{ Map json=jsonDecode(res.body); 抛出('${jso)