javascript - 使用 google drive api 存储应用数据

标签 javascript jquery html google-drive-api

我正在尝试将包含配置信息的 json 对象存储在 Google Drive Appdata 文件中。我目前正在用 JS 编写在客户端 上运行的应用程序。使用 Google Drive API,我目前可以检查 appdata 文件夹中的文件。 如果找不到配置,我该如何生成新文件并将其存储在 appdata 文件夹中?

var request = gapi.client.drive.files.list({
    'q': '\'appdata\' in parents'
});
request.execute(function(resp) {
for (i in resp.items) {
  if(resp.items[i].title == FILENAME) {
    fileId = resp.items[i].id;
    readFile(); //Function to read file
    return;
  }
}
//Create the new file if not found
});

最佳答案

gapi 客户端不提供将文件上传到 google drive 的方法(它为元数据提供),但它们仍然公开 API 端点。 这是我一直用于 V3 api 的示例

        function saveFile(file, fileName, callback) {
            var file = new Blob([JSON.stringify(file)], {type: 'application/json'});
            var metadata = {
                'name': fileName, // Filename at Google Drive
                'mimeType': 'application/json', // mimeType at Google Drive
                'parents': ['appDataFolder'], // Folder ID at Google Drive
            };

            var accessToken = gapi.auth.getToken().access_token; // Here gapi is used for retrieving the access token.
            var form = new FormData();
            form.append('metadata', new Blob([JSON.stringify(metadata)], {type: 'application/json'}));
            form.append('file', file);

            var xhr = new XMLHttpRequest();
            xhr.open('post', 'https://www.googleapis.com/upload/drive/v3/files?uploadType=multipart&fields=id');
            xhr.setRequestHeader('Authorization', 'Bearer ' + accessToken);
            xhr.responseType = 'json';
            xhr.onload = () => {
                console.log(xhr.response.id); // Retrieve uploaded file ID.
                callback(xhr.response);
            };
            xhr.send(form);
        }

并且由于 google drive 将允许重复的文件名,因为它们的 ID 是唯一的,所以我使用类似这样的方法来检查它是否已经存在:

        function fileExists(file, fileName){
            var request = gapi.client.drive.files.list({
                    spaces: 'appDataFolder',
                    fields: 'files(id, name, modifiedTime)'
            });
            request.execute(function(res){
                var exists = res.files.filter(function(f){
                    return f.name.toLowerCase() === fileName.toLowerCase();
                }).length > 0;
                if(!exists){
                    saveFile(file, fileName, function(newFileId){
                        //Do something with the result
                    })
                }
            })
        }

关于javascript - 使用 google drive api 存储应用数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173090/

相关文章:

javascript - 如何测试 Javascript 或 JQuery 中的链接是否有效?

jquery - Bootstrap 3 中的导航栏

javascript - 如果我使用 javascript 将监听器添加到父元素,是否删除特定子元素的事件监听器?

javascript - 如何使用 javascript 函数自动完成图像?

javascript - 可读性API

javascript - Socket.io 错误挂接到 express.js

javascript - 在 div 淡入后重置它以防止 'stacking'

JavaScript 导航菜单多次点击

php - 如何使用 jQuery 检查用户输入中所有图像标签的来源

javascript - jquery 动画无法正常工作