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