Невозможно загрузить несколько файлов на диск - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь загрузить несколько файлов на диск Google с помощью нескольких кнопок загрузки файлов (6 кнопок). Мой код работает, если я выбираю один файл для каждой кнопки. Но когда я пытаюсь загрузить несколько файлов, это выдает мне ошибку TypeError: Аргумент 1 FileReader.readAsDataURL не реализует интерфейс Blob

script.html

  function uploadFiles() {
        var allFiles = [];
        allFiles.push(document.getElementById('myFiles1').files);
        allFiles.push(document.getElementById('myFiles2').files);
        allFiles.push(document.getElementById('myFiles3').files);
        allFiles.push(document.getElementById('myFiles4').files);
        allFiles.push(document.getElementById('myFiles5').files);
        allFiles.push(document.getElementById('myFiles6').files);
        //console.log(allFiles.length);
        //console.log(allFiles);
        var courseName = document.getElementById('cno').value;
        if (!courseName) {
            window.alert('Missing course name!');
        }
        var professorName = document.getElementById('pname').value;
        if (!professorName) {
            window.alert('Missing professor name!');
        }
        var folderName = 'XXX' + courseName + ' ' + professorName;
        if (allFiles.length == 0) {
            window.alert('No file selected!');
        } else {
            numUploads.total = allFiles.length;
            google.script.run.withSuccessHandler(function(r) {
                // send files after the folder is created...
                for (var i = 0; i < allFiles.length; i++) {
                    // Send each file at a time
                    uploadFile(allFiles[i], r.folderId);
                }
            }).createFolder(rootFolderId, folderName);
        }
    }

  function uploadFile(file, folderId) {
        var reader = new FileReader();
        reader.onload = function(e) {
            var content = reader.result;             
            google.script.run.withSuccessHandler(showSuccess)
                    .uploadFiletoDrive(content, file.name, folderId);
        }
        reader.readAsDataURL(file);
        document.getElementById('Assessment-form').reset();
    }

code.gs

function createFolder(parentFolderId, folderName) {
try {
    var parentFolder = DriveApp.getFolderById('MY_FOLDER_ID');
    var folders = parentFolder.getFoldersByName(folderName);
    var folder;
    if (folders.hasNext()) {
        folder = folders.next();
    } else {
        folder = parentFolder.createFolder(folderName);
    }
    return {
        'folderId' : folder.getId()
    }
} catch (e) {
    return {
        'error' : e.toString()
    }
}
}

function uploadFiletoDrive(base64Data, fileName, folderId) {
try {
    var splitBase = base64Data.split(','), type = splitBase[0].split(';')[0]
            .replace('data:', '');
    var byteCharacters = Utilities.base64Decode(splitBase[1]);
    var ss = Utilities.newBlob(byteCharacters, type);
    ss.setName(fileName);

    var folder = DriveApp.getFolderById(folderId);
    var files = folder.getFilesByName(fileName);
    var file;
    while (files.hasNext()) {
        // delete existing files with the same name.
        file = files.next();
        folder.removeFile(file);
    }
    file = folder.createFile(ss);
    return {
        'folderId' : folderId,
        'fileName' : file.getName()
    };
} catch (e) {
    return {
        'error' : e.toString()
    };
}
}

1 Ответ

1 голос
/ 17 апреля 2019

document.getElementById('Assessment-form').reset();

Кажется, вы сбрасываете форму после каждой загрузки, а не после 6-й загрузки.Возможно, allFiles файлы будут потеряны после первой загрузки.

allFiles.push(document.getElementById('myFiles1').files);

Вы нажимаете filelist вместоfile.Попробуйте

allFiles.push(document.getElementById('myFiles1').files[0]);

Кроме того, вам не нужно использовать FileReader.Вы можете загрузить узел формы напрямую .Файлы будут автоматически преобразованы в BLOB-объекты на сервере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...