如何上传到谷歌驱动器的特定文件夹?

时间:2021-03-05 11:26:58

标签: javascript

我有如下所示的 html 表单和 gs.code。它的工作完美,但文件上传到谷歌驱动器的根文件夹中。我希望我的文件上传到特定文件夹中。请帮帮我。

我什至想知道如何使用uploadView.setIncludeFolders(true) 来显示特定文件夹和子文件夹以供选择和上传。

var config = {
  DEVELOPER_KEY: 'xxxx',
  UPLOAD_FOLDER_ID: 'xxx',
  ACCEPTED_FOLDER_ID: 'xxx',
  TIME_ZONE: "GMT",
  DATE_FORMAT: "MM/dd/yyyy HH:mm:ss",
  ALLOWED_FILES: [
    //    MimeType.BMP,
    //    MimeType.GIF,
        MimeType.pdf
    //    MimeType.PNG,
    //    MimeType.SVG, 
    //    MimeType.PDF,
    //    MimeType.CSS,
    //    MimeType.CSV, 
    //    MimeType.HTML,    
    //    MimeType.JAVASCRIPT,  
    //    MimeType.PLAIN_TEXT,  
    //    MimeType.RTF,
    //    MimeType.OPENDOCUMENT_GRAPHICS,
    //    MimeType.OPENDOCUMENT_PRESENTATION,   
    //    MimeType.OPENDOCUMENT_SPREADSHEET,    
    //    MimeType.OPENDOCUMENT_TEXT,   
    //    MimeType.MICROSOFT_EXCEL,     
    //    MimeType.MICROSOFT_EXCEL_LEGACY,  
    //    MimeType.MICROSOFT_POWERPOINT,    
    //    MimeType.MICROSOFT_POWERPOINT_LEGACY, 
    //    MimeType.MICROSOFT_WORD,
    //    MimeType.MICROSOFT_WORD_LEGACY,   
    //    MimeType.ZIP
  ]
}

function doGet( e ){
  return HtmlService.createHtmlOutputFromFile( "Form.html" ).setSandboxMode( HtmlService.SandboxMode.IFRAME )
}

function getConfig(){
  DriveApp.getRootFolder();
  return {
    DEVELOPER_KEY: config.DEVELOPER_KEY,
    TOKEN: ScriptApp.getOAuthToken(),
    UPLOAD_FOLDER_ID: config.UPLOAD_FOLDER_ID
  }
}

function verifyUpload( upload ){
  var acceptedFolder = DriveApp.getFolderById( config.ACCEPTED_FOLDER_ID ),
      uploadFolder = DriveApp.getFolderById( config.UPLOAD_FOLDER_ID ),
      date = Utilities.formatDate( new Date(), config.TIME_ZONE, config.DATE_FORMAT ),
      success = [],
      fail = [],
      doc,
      file,
      name
  
  for( var i = 0; i < upload.docs.length; i++ ){
    doc = upload.docs[ i ];
    file = DriveApp.getFileById( doc.id );
    name = file.getName();
    if ( config.ALLOWED_FILES.indexOf( doc.mimeType ) >= 0 ){
      success.push( name );
      acceptedFolder.addFile( file );
      uploadFolder.removeFile( file );
    } else {
      fail.push( name );
    }
    file.setName( upload.username + " - " + date + " - " + name);
  }
  
  return {
    success: success,
    fail: fail
  }
}
<!DOCTYPE html>

<head>
    <link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">
    <style>
        .app {
            margin: 50px 0 0 30px;
        }
        .formholder {
            background-color: #eee;
            padding: 25px;
            min-width: 400px;
            max-width: 40%
        }
        input[type="text"] {
            width: 300px;
        }
    </style>
</head>
<html>

<body>
    <div class="app">
        <div class="block formholder">
            <div class="block form-group">
                <label for="username">Name<span class="current">*</span>
                </label>
                <input type="text" id="username" class="width-100">
            </div>
            <div class="block">
                <button class="blue" id="run-filepicker-interface">Choose File/s to Upload</button>
            </div>
            <div class="block">                
                </a>
            </div>
        </div>
        <div class="block">
            <div class="block" id="success-output"></div>
            <div class="block error" id="error-output"></div>
        </div>
    </div>
</body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
    <script>
        var fileUploadApp = {
            config: {
                DIALOG_DIMENSIONS: {
                    width: 600,
                    height: 425
                }
            },

            init: function() {
                google.script.run
                    .withSuccessHandler(fileUploadApp.setup)
                    .withFailureHandler(fileUploadApp.system.outputError)
                    .getConfig()
            },

            setup: function(config) {
                $.extend(fileUploadApp.config, config)
                gapi.load('picker', {
                    'callback': function() {
                        $('#run-filepicker-interface').click(fileUploadApp.runFilePickerInterface);
                    }
                });
            },

            runFilePickerInterface: function(event) {
                fileUploadApp.system.clearOutput()
                var username = $("#username").val()
                if (username) {
                    var config = fileUploadApp.config
                    $('#run-filepicker-interface').prop("disabled", false)
                    var uploadView = new google.picker.DocsUploadView()
                    uploadView.setIncludeFolders(false)
                    var picker = new google.picker.PickerBuilder()
                        .addView(uploadView)
                        .enableFeature(google.picker.Feature.NAV_HIDDEN)
                        .enableFeature(google.picker.Feature.MULTISELECT_ENABLED)
                        .hideTitleBar()
                        .setOAuthToken(config.TOKEN)
                        .setDeveloperKey(config.DEVELOPER_KEY)
                        .setCallback(fileUploadApp.pickerCallback)
                        .setSize(config.DIALOG_DIMENSIONS.width, config.DIALOG_DIMENSIONS.height)
                        .setOrigin(google.script.host.origin)
                        .setSelectableMimeTypes('application/vnd.google-apps.folder')
                        .build();
                    picker.setVisible(true);

                } else {
                    fileUploadApp.system.outputError("Name is required.")
                }
            },

            pickerCallback: function(data) {
                switch (data.action) {
                    case google.picker.Action.PICKED:
                        var upload = {
                            username: $("#username").val(),
                            docs: []
                        }
                        $.each(data.docs, function(index, value) {
                            if (value.uploadState == "success")
                                upload.docs.push({
                                    id: value.id,
                                    mimeType: value.mimeType
                                })
                        })
                        google.script.run
                            .withSuccessHandler(fileUploadApp.verifyUploadSuccess)
                            .withFailureHandler(function(msg) {
                                $('#run-filepicker-interface').prop("disabled", false)
                                fileUploadApp.system.outputError(msg)
                            })
                            .verifyUpload(upload)

                        fileUploadApp.system.outputSuccess("Verifying uploaded files.")
                        break;
                    case google.picker.Action.CANCEL:
                        $('#run-filepicker-interface').prop("disabled", false)
                        break;
                    case google.picker.Action.LOADED:
                        // actions here
                        break;
                }
            },

            verifyUploadSuccess: function(verifyResult) {
                fileUploadApp.system.clearOutput()
                if (verifyResult.success.length) {
                    fileUploadApp.system.outputSuccess(
                        "Fail:<br />" +
                        verifyResult.success.join("<br />")
                    )
                }
                if (verifyResult.fail.length) {
                    fileUploadApp.system.outputError(
                        "Success:<br />" +
                        verifyResult.fail.join("<br />")
                    )
                }
                $('#run-filepicker-interface').prop("disabled", false)
            },

            system: {
                outputError: function(msg) {
                    $("#error-output").html(msg)
                },

                outputSuccess: function(msg) {
                    $("#success-output").html(msg)
                },

                clearOutput: function() {
                    $("#error-output, #success-output").html("")
                }
            }
        }

        function init() {
            fileUploadApp.init()
        }
    </script>
    <script src="https://apis.google.com/js/api.js?onload=init"></script>
</html>

0 个答案:

没有答案