我正尝试使用node.js(https://github.com/googleapis/google-api-nodejs-client/)的官方Google api库访问由我的Web应用程序创建的文件夹中的媒体文件。
成功执行oauth时,我将创建一个文件夹MyAppFolder
,并在其中创建一个media
文件夹。
这个想法是,用户将用他们想要的任何照片和视频填充此media
文件夹,然后我的Webapp会将其带入并显示在页面上,以供用户获得其媒体的汇总视图。我可以在media
文件夹中获取所有媒体文件。这是我的代码片段:
async function getGoogleDriveMedia({ user, credentials }) {
// await prepareDrive({ user, credentials });
const rootFolder = await getRootFolder({ user, credentials });
if (!rootFolder) {
return;
}
const client = await createOauthClient({ user, credentials });
const drive = google.drive({
version: 'v3',
auth: client,
});
const mediaFolderRes = await drive.files.list({
q: `mimeType='application/vnd.google-apps.folder' and name='media' and '${
rootFolder.id
}' in parents`,
fields: 'nextPageToken, files(id, name, parents)',
});
const mediaFolder = _.get(mediaFolderRes, 'data.files[0]');
if (!mediaFolder) {
return;
}
const mediaRes = await drive.files.list({
q: `'${
mediaFolder.id
}' in parents and (mimeType contains 'image/' or mimeType contains 'video/')`,
fields:
'nextPageToken, files(' +
[
'id',
'name',
'webContentLink',
'webViewLink',
].join(', ') +
')',
});
return _.get(mediaRes, 'data.files');
}
现在的问题是,由于无法公开访问这些媒体,所以我无法显示它们。是否可以通过一次权限更新使MyAppFolder
及其内部的所有内容对公众开放?还是我需要针对每个文件执行此操作?
我还检查了其API资源管理器上的fields.files
参数:https://developers.google.com/apis-explorer/#search/drive.files.list/m/drive/v3/drive.files.list
没有类似.previewLink
或其他图片网址字段的内容。
如何在我的Web应用程序上显示这些图像?
答案 0 :(得分:1)
看看file.thumbnailLink
。它可能具有满足您目的的足够分辨率,并且是公开的。 NB恕我直言,它是公开的事实是一个安全漏洞,将来可能会修复。
注意,您的代码中存在错误。您正确地获取了nextPageToken
,但是没有使用它来测试文件列表中是否还有更多页面需要获取。
答案 1 :(得分:0)
是否可以通过单个权限更新使MyAppFolder及其中的所有内容对公众开放?还是我需要针对每个文件执行此操作?
否,无法一次更新文件中的所有内容。您将必须更新每个文件。即使更新文件夹也不会更改文件夹中用于文件的设置。
在文件上传后,让您的应用程序更改文件的权限。同时,运行所有现有文件并更改其权限。
注意:我希望您已通知用户其文件将公开。