2015-03-31 129 views
0

將這個腳本放在一起,將文件上傳到我的谷歌驅動器。 我需要它能夠處理一個大的.zip文件或多個圖像文件。 目前如果你上傳一個大的.zip文件(大約7MB),它會超時。多個文件上傳Google Apps腳本

我更喜歡讓它上傳多個文件。

Google Apps腳本:

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

根據文檔,它應該適用於小於10MB的文件大小。檢查此鏈接http://stackoverflow.com/questions/26003437/google-drive-script-not-uploading-file-larger-than-10mb – KRR 2015-03-31 22:08:50

+0

這裏是一個多文件上傳我用在GAS: http:// stackoverflow .com/questions/28147486/handling-multiple-files-from-an-input-element-in-an-array-with-google-apps-scrip/28161468#28161468 – 2015-04-01 06:32:28

+0

這看起來很酷:http://stackoverflow.com/questions/31126181 /上傳多文件到谷歌驅動器與谷歌應用程序腳本 – Ryan 2017-05-13 01:29:25

回答

0

我沒有看到其他的方式,使多個文件GAS工作,如果不使用多個文件輸入。您可以使用Jquery(或簡單的Javascript)添加dinamically輸入,並在服務器端測試以檢查有多少輸入文件被轉移。

像這樣: 在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模式下工作。 ie 2015-04-01 06:33:50