JavaScript Google Drive API V3-将文件上载到文件夹

JavaScript Google Drive API V3-将文件上载到文件夹,javascript,google-drive-api,Javascript,Google Drive Api,我一直在尝试上传一个简单的文本文件,其中包含用户的电子邮件和姓名,并将其上传到我驱动器根目录下的文件夹中。我创建文件夹,然后使用其ID将文件上载到该文件夹 除了没有将配置文件添加到新文件夹外,其他一切正常。它与新文件夹一起放在根目录中 我已经研究了许多与此相关的问题,并尝试了几乎所有问题的解决方案。特别是这个问题()似乎正是我的问题。但正如你所看到的,我实现了他的改变,我仍然有同样的问题 下面是为此调用的函数 /** * Creates the correct directory struct

我一直在尝试上传一个简单的文本文件,其中包含用户的电子邮件和姓名,并将其上传到我驱动器根目录下的文件夹中。我创建文件夹,然后使用其ID将文件上载到该文件夹

除了没有将配置文件添加到新文件夹外,其他一切正常。它与新文件夹一起放在根目录中

我已经研究了许多与此相关的问题,并尝试了几乎所有问题的解决方案。特别是这个问题()似乎正是我的问题。但正如你所看到的,我实现了他的改变,我仍然有同样的问题

下面是为此调用的函数

/**
 * Creates the correct directory structure and a config file in the user's drive;
 */
function setupDrive(email, name) {
    // TODO create CSR folder and config file inside
    createFolder('CSR');
    uploadConfig(email, name);
    checkAuth();
}
这是
createFolder()
函数

/**
 * Creates a folder with the given name in the drive;
 */
function createFolder(dirName) {
    var metadata = {
        'name' : dirName,
        'mimeType' : 'application/vnd.google-apps.folder'
    };

    var request = gapi.client.request({
        'path': '/drive/v3/files',
        'method': 'POST',
        'body': JSON.stringify(metadata)});
    request.execute();
}
/**
 * Uploads a config file to the CSR folder with the given email and name;
 */
function uploadConfig(email, name) {    
    var request = gapi.client.request({
        'path': '/drive/v3/files',
        'method': 'GET',
        'q': 'name="CSR", trashed="false", mimeType="application/vnd.google-apps.folder"',
        'fields': "nextPageToken, files(id, name)"
    });

    request.execute(function (results) {
        var files = results.files;
        var csrID = '';
        if (files && files.length > 0) {
            csrID = files[0].id;
        }
        uploadFile('config', email + '\n' + name, 'plain', csrID);
    });
}
/**
 * Uploads either a plain text file or a CSV file to the user's Google Drive in the CSR folder;
 */
function uploadFile(fileName, fileContent, mimeType, parentID) {
    console.log(parentID); //check that a parentID is being passed in
    var auth_token = gapi.auth.getToken().access_token;

    var metaType = '';
    var bodyType = '';
    if (mimeType == 'csv') {
        metaType = 'application/vnd.google-apps.spreadsheet';
        bodyType = 'text/csv\r\n\r\n';
    } else if (mimeType == 'plain') {
        metaType = 'text/plain\r\n\r\n';
        bodyType = 'text/plain\r\n\r\n';
    }

    const boundary = '-------314159265358979323846';
    const delimiter = "\r\n--" + boundary + "\r\n";
    const close_delim = "\r\n--" + boundary + "--";

    var metadata = {
        'name': fileName,
        'mimeType': metaType,
        'parents':[{'id': parentID}]
    };  

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

    var request = gapi.client.request({ 
        'path': '/upload/drive/v3/files',
        'method': 'POST',
        'params': {'uploadType': 'multipart'},
        'headers': { 'Content-Type': 'multipart/form-data; boundary="' + boundary + '"', 'Authorization': 'Bearer ' + auth_token, },
        'body': multipartRequestBody 
    })

    request.execute(function (file) {
        console.log("Wrote to file " + file.name + " id: " + file.id); 
        }); 
}
这是
uploadConfig()
函数

/**
 * Creates a folder with the given name in the drive;
 */
function createFolder(dirName) {
    var metadata = {
        'name' : dirName,
        'mimeType' : 'application/vnd.google-apps.folder'
    };

    var request = gapi.client.request({
        'path': '/drive/v3/files',
        'method': 'POST',
        'body': JSON.stringify(metadata)});
    request.execute();
}
/**
 * Uploads a config file to the CSR folder with the given email and name;
 */
function uploadConfig(email, name) {    
    var request = gapi.client.request({
        'path': '/drive/v3/files',
        'method': 'GET',
        'q': 'name="CSR", trashed="false", mimeType="application/vnd.google-apps.folder"',
        'fields': "nextPageToken, files(id, name)"
    });

    request.execute(function (results) {
        var files = results.files;
        var csrID = '';
        if (files && files.length > 0) {
            csrID = files[0].id;
        }
        uploadFile('config', email + '\n' + name, 'plain', csrID);
    });
}
/**
 * Uploads either a plain text file or a CSV file to the user's Google Drive in the CSR folder;
 */
function uploadFile(fileName, fileContent, mimeType, parentID) {
    console.log(parentID); //check that a parentID is being passed in
    var auth_token = gapi.auth.getToken().access_token;

    var metaType = '';
    var bodyType = '';
    if (mimeType == 'csv') {
        metaType = 'application/vnd.google-apps.spreadsheet';
        bodyType = 'text/csv\r\n\r\n';
    } else if (mimeType == 'plain') {
        metaType = 'text/plain\r\n\r\n';
        bodyType = 'text/plain\r\n\r\n';
    }

    const boundary = '-------314159265358979323846';
    const delimiter = "\r\n--" + boundary + "\r\n";
    const close_delim = "\r\n--" + boundary + "--";

    var metadata = {
        'name': fileName,
        'mimeType': metaType,
        'parents':[{'id': parentID}]
    };  

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

    var request = gapi.client.request({ 
        'path': '/upload/drive/v3/files',
        'method': 'POST',
        'params': {'uploadType': 'multipart'},
        'headers': { 'Content-Type': 'multipart/form-data; boundary="' + boundary + '"', 'Authorization': 'Bearer ' + auth_token, },
        'body': multipartRequestBody 
    })

    request.execute(function (file) {
        console.log("Wrote to file " + file.name + " id: " + file.id); 
        }); 
}
最后是
uploadFile()
函数

/**
 * Creates a folder with the given name in the drive;
 */
function createFolder(dirName) {
    var metadata = {
        'name' : dirName,
        'mimeType' : 'application/vnd.google-apps.folder'
    };

    var request = gapi.client.request({
        'path': '/drive/v3/files',
        'method': 'POST',
        'body': JSON.stringify(metadata)});
    request.execute();
}
/**
 * Uploads a config file to the CSR folder with the given email and name;
 */
function uploadConfig(email, name) {    
    var request = gapi.client.request({
        'path': '/drive/v3/files',
        'method': 'GET',
        'q': 'name="CSR", trashed="false", mimeType="application/vnd.google-apps.folder"',
        'fields': "nextPageToken, files(id, name)"
    });

    request.execute(function (results) {
        var files = results.files;
        var csrID = '';
        if (files && files.length > 0) {
            csrID = files[0].id;
        }
        uploadFile('config', email + '\n' + name, 'plain', csrID);
    });
}
/**
 * Uploads either a plain text file or a CSV file to the user's Google Drive in the CSR folder;
 */
function uploadFile(fileName, fileContent, mimeType, parentID) {
    console.log(parentID); //check that a parentID is being passed in
    var auth_token = gapi.auth.getToken().access_token;

    var metaType = '';
    var bodyType = '';
    if (mimeType == 'csv') {
        metaType = 'application/vnd.google-apps.spreadsheet';
        bodyType = 'text/csv\r\n\r\n';
    } else if (mimeType == 'plain') {
        metaType = 'text/plain\r\n\r\n';
        bodyType = 'text/plain\r\n\r\n';
    }

    const boundary = '-------314159265358979323846';
    const delimiter = "\r\n--" + boundary + "\r\n";
    const close_delim = "\r\n--" + boundary + "--";

    var metadata = {
        'name': fileName,
        'mimeType': metaType,
        'parents':[{'id': parentID}]
    };  

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

    var request = gapi.client.request({ 
        'path': '/upload/drive/v3/files',
        'method': 'POST',
        'params': {'uploadType': 'multipart'},
        'headers': { 'Content-Type': 'multipart/form-data; boundary="' + boundary + '"', 'Authorization': 'Bearer ' + auth_token, },
        'body': multipartRequestBody 
    })

    request.execute(function (file) {
        console.log("Wrote to file " + file.name + " id: " + file.id); 
        }); 
}
非常感谢您的帮助,我为这么多代码道歉

编辑:
当我通过RESTV2完成所有工作时,我能够让它工作。但是,我仍然有兴趣看到一个允许我使用V3的解决方案。

与此相比,我看不出您的代码有任何错误。它指出v2过程与v3非常相似。您已经将url中的版本更改为v3,并根据v3更改了参数。在本文中还指出,在v3中,不再有父集合。相反,您可以通过使用子ID执行files.get来获取parents属性。理想情况下,您可以使用fields参数将响应限制为仅对父级响应。如果OP只在元数据中使用父项:[parentID'],这可能也会有所帮助。

这在V3中可以正常工作

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);
});
}

对的您应该这样使用parents字段:parents:[folderId]如node.js示例所示:您还可以通过解释代码的作用、与OPs代码的区别等来提高答案的质量。解释总是比一堆代码行更有用:)