2015-03-31 4 views
0

Составьте этот скрипт, который выгрузит файл на мой Google-накопитель. Мне нужно, чтобы он мог обрабатывать либо большой ZIP-файл, либо несколько файлов изображений. В настоящее время он не работает, если вы загружаете большой .zip-файл (около 7 МБ)Множественная загрузка файлов Сценарий Google Apps

Я бы предпочел, чтобы он загружал несколько файлов.

Apps Script:

function doGet(e) { 
    return HtmlService.createHtmlOutputFromFile('form.html'); 
} 

function uploadFiles(form) { 

    try { 
    var unitNumber = form.unitNumber; 
    if (unitNumber == "") { 
     unitNumber = ""; 
    } else { 
     unitNumber = " #" + unitNumber; 
    } 
    var foldertitle = form.streetAddress + unitNumber + ' ' + form.cityName + ' ' + form.stateName + ' - ' + form.businessName + ' ' + form.managerName + ' - ' + form.propertyType; 
    var folder, folders = DriveApp.getFolderById("0B0V8-0eo7tx8MTQzcGFwdXF6SFU"); 
    var createfolder = folders.createFolder(foldertitle); 
    folder = createfolder; 
    var blob = form.filename; 
    var file = folder.createFile(blob); 

    return "File uploaded successfully "; 

    } catch (error) { 
    Logger.log('err: ' + error.toString()); 
    return error.toString(); 
    } 

} 

Форма Код

<body> 
    <div id="formcontainer"> 
    <form id="myForm"> 
     <div> 
     <input type="text" name="businessName" placeholder="Business Name"> 
     </div> 
     <div> 
     <input type="text" name="managerName" placeholder="Manager Name"> 
     </div> 
     <div> 
     <input type="text" name="streetAddress" placeholder="Street Address"> 
     </div> 
     <div> 
     <input type="text" name="unitNumber" placeholder="Unit Number"> 
     </div> 
     <div> 
     <input type="text" name="cityName" placeholder="City"> 
     </div> 
     <div> 
     <input type="text" name="stateName" placeholder="State"> 
     </div> 
     <br> 
     <label for="propertyType">Choose Type</label> 
     <br> 
     <select name="propertyType"> 
     <option value="Interactive Floor Plan">IFP</option> 
     <option value="Pictures Only">Pictures</option> 
     <option value="Video Only">Video</option> 
     <option value="Complete Property">All</option> 
     </select> 
     <br> 
     <label for="myFile">Compress All Files into .zip file</label> 
     <br> 
     <input type="file" name="filename" id="myFile" multiple> 
     <input type="submit" value="Upload File" onclick="this.value='Uploading..'; 
        google.script.run.withSuccessHandler(fileUploaded) 
        .uploadFiles(this.parentNode); 
        return false;"> 
    </form> 
    </div> 

    <div id="output"></div> 

    <script> 
    function fileUploaded(status) { 
     document.getElementById('myForm').style.display = 'none'; 
     document.getElementById('output').innerHTML = status; 
    } 
    </script> 

    <style> 
    body { 
     max-width: 400px; 
     padding: 20px; 
     margin: auto; 
    } 
    input { 
     display: inline-block; 
     width: 100%; 
     padding: 5px 0px 5px 5px; 
     margin-bottom: 10px; 
     -webkit-box-sizing: border-box; 
     ‌​ -moz-box-sizing: border-box; 
     box-sizing: border-box; 
    } 
    select { 
     margin: 5px 0px 15px 0px; 
    } 
    input[type="submit"] { 
     width: auto !important; 
     display: block !important; 
    } 
    input[type="file"] { 
     padding: 5px 0px 15px 0px !important; 
    } 
    </style> 
</body> 
+0

В соответствии с документацией он должен работать нормально при размере файла менее 10 МБ. Проверьте эту ссылку http://stackoverflow.com/questions/26003437/google-drive-script-not-uploading-file-larger-than-10mb – KRR

+0

Вот несколько загрузок файлов, которые я использую в GAS: http: // stackoverflow .com/questions/28147486/handling-multiple-files-from-an-input-element-in-a-array-with-google-apps-scrip/28161468 # 28161468 –

+0

Это выглядит круто: http://stackoverflow.com/questions/31126181/uploading-multiple-files-to-google-drive-with-google-app-script – Ryan

ответ

0

Я не вижу другого пути, чтобы сделать GAS работать с несколькими файлами, если не с несколькими файлами входов. Вы можете добавить динамический ввод с помощью JQuery (или простой Javascript) и протестировать на стороне сервера, чтобы проверить, сколько входных файлов было перенесено.

Как так: в HTML:

<input type="file" name="filename0" id="myFile"><div id="moreInputs"></div> 

<button onClick="moreFieds()">Add more Fieds</button> 
<script> 
var numInputs = 1; 
function moreFieds(){ 
    $('#moreInputs').append($('<input type="file" name="filename'+numInputs+'" id="myFile">')); 
    numInputs++; 
} 
</script> 

В code.gs:

var numForms = 0; 
while(form[ (filename + numForms) ]){ 
    var blob = form[ (filename + numForms) ]; 
    var file = folder.createFile(blob); 
    numForms++; 
} 

Или, как мне нравится больше, отправлять файлы входы по одному в сценарии, давая каждый вход это что вы можете узнать, когда каждый файл выполнил загрузку с помощью successHandler.

+0

Множественный атрибут работает в режиме IFRAME. т. Е.

Смежные вопросы