javascript - 成功上传到 Google 云端硬盘但打开时文件为空(仍有大小)

标签 javascript google-api google-drive-api base64 google-api-js-client

将图像 URL 转换为 base64 字符串后,我尝试将此 base64 图像上传到 Goolge Drive,一切正常:响应代码 200,Goole Drive 在 App/Web 中显示此文件。

但是当我打开这张图片时,它就像谷歌在 base64 字符串上更改了一些东西,所以它无法读取。

下载图像并将其从 GD 转换为 base64 字符串后,我发现原来的 base64 字符串发生了变化。

上传前:https://anotepad.com/notes/nt6fct

来自 Google 云端硬盘的文件:https://anotepad.com/notes/ayg57q

上传代码:

testUploadFile(fileInfo, base64Data){
    const boundary = '-------314159265358979323846';
    const delimiter = "\r\n--" + boundary + "\r\n";
    const close_delim = "\r\n--" + boundary + "--";
    var contentType = fileInfo.type || 'application/octet-stream';
    var metadata = {
        'name': fileInfo.title,
        'mimeType': contentType
    };

    var multipartRequestBody =
        delimiter +
        'Content-Type: application/json\r\n\r\n' +
        JSON.stringify(metadata) +
        delimiter +
        'Content-Type: ' + contentType + '\r\n' +
        'Content-Transfer-Encoding: base64\r\n' +
        '\r\n' +
        base64Data +
        close_delim;

    gapi.client.request({
        'path': '/upload/drive/v3/files',
        'method': 'POST',
        'params': {
            'uploadType': 'multipart'
        },
        'headers': {
            'Content-Type': 'multipart/related; boundary="' + boundary + '"'
        },
        'body': multipartRequestBody
    }).then(function(response){
        console.log(response);
    });
}

有问题@@请指正一下好吗? 提前致谢!

最佳答案

这个简单的示例可能会帮助您找到代码中的问题。

function createFile(){
const boundary = '-------314159265358979323846';
const delimiter = "\r\n--" + boundary + "\r\n";
const close_delim = "\r\n--" + boundary + "--";

var fileContent = 'It works :)';

var metadata = {
    'name': 'myFile',
    'mimeType': 'text/plain\r\n\r\n'
};

var multipartRequestBody = delimiter +  'Content-Type: application/json\r\n\r\n' + JSON.stringify(metadata) + delimiter + 'Content-Type: ' + 'text/plain\r\n\r\n' + fileContent + close_delim;

gapi.client.request({
    'path': '/upload/drive/v3/files',
    'method': 'POST',
    'params': {
        'uploadType': 'multipart'
    },
    'headers': {
        'Content-Type': 'multipart/related; boundary="' + boundary + '"'
    },
    'body': multipartRequestBody
}).then(function(response){
    console.log(response);
});
}

关于javascript - 成功上传到 Google 云端硬盘但打开时文件为空(仍有大小),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52833659/

相关文章:

python - 有没有办法通过一个请求仅列出 Google Drive API 上根文件夹或根文件夹下任何级别的文件?

ios - 如何在 Google Drive API (Swift 5) 中禁用文件夹递归

javascript - 如何找出哪个元素触发了哪个事件

javascript - 如何在谷歌图表中显示完整的数字(5000而不是5K)?

javascript - js 中意外的 } 标记 - 尝试学习 ajax

node.js - 如何使用 Nodejs 在没有 OAuth 的情况下使用 Google Drive API?

android - E/TokenRequestor : You have wrong OAuth2 related configurations, 请检查。详细错误:UNREGISTERED_ON_API_CONSOLE

php - 如何为使用YouTube数据API v3 php上传的视频启用获利功能?

javascript - 定期向 google script web 应用程序发送数据

java - Google Drive api 保存到文件