【发布时间】:2022-12-16 00:21:44
【问题描述】:
这是我的问题:
我正在使用 Flutter 创建一个基于存储在 Google Drive 上的音频文件的小型应用程序。
我正在使用 drive api 发出我的请求,在我的谷歌登录中使用这些范围:
GoogleSignIn _googleSignIn = GoogleSignIn(
scopes: [
'email',
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/contacts.readonly',
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/docs',
'https://www.googleapis.com/auth/drive.appdata',
],
);
我有一个 auth 元素并处理登录和注销。到那时,没有问题。
我还可以使用如下所示的实现来请求我的文件:
var api = widget.api.getAPI();
var files = await api.files.list($fields: '*');
这非常有效,也是如此:
var api = widget.api.getAPI();
var files = await api.files.get("myFileId"); (//does get a file instance)
但是因为我想检索我的音频文件中包含的一些元数据,并且由于驱动 API 本身不支持提取音频元数据并将其作为谷歌元数据发送,我想我会通过部分下载来提取它在文件本身上。
问题是:我似乎无法让部分下载工作。 Based on the doc,我认为实现看起来像这样:
import 'package:googleapis/drive/v3.dart' as ga;
(...)
try {
var partiallyDownloadedFile = await api.files.get(
"myFileIdHere",
downloadOptions: ga.PartialDownloadOptions(ga.ByteRange(0, 10))); //should get a ga.Media instance
print("partial download succeeded");
print(partiallyDownloadedFile);
//(...do stuff...)
return;
} catch (err) {
print('Error occured : ');
print(err);
return;
}
但这总是会引发此错误:
ApiRequestError(消息:尝试部分下载但无效 'Content-Range' 标头(原为:空,预期:字节 0-10/)。
我尝试在 Wav 文件和 MP4 文件上使用它。错误总是一样的,这让我相信是我的实现出了问题,但我不确定我应该做什么来修复它。是我的请求缺少标题吗?响应不包括它? 虽然很清楚,但该错误根本无法帮助我解决问题。我似乎找不到任何关于如何进行部分媒体请求的文档。我还没有找到任何可以与之比较的示例项目。
PartialDownloadOptions 没有太多文档。
我可以通过下载链接手动提出部分请求(这是我开始阅读音乐的方式),但驱动 API 应该允许这样做。任何熟悉 Flutter/google API 的人都可以帮助我更正我的实现吗?
【问题讨论】:
-
我不知道这是否会以任何方式影响这篇文章,但我仍然没有找到解决方案。因此,我一直搁置这个项目,直到今天它仍然让我感到困惑。
标签: flutter dart google-api google-drive-api