i have a web page that i will use collect file from anyone and store it to my google drive (not theirs) then list the file name and url in a spreadsheet. for that purpose i choose to use gas as the interface between my page and my drive, something like this:
my page --> GAS --> drive
my page has form like this:
<form action="https://script.google.com/macros/s/some-random-string/exec"
method="post" enctype="multipart/form-data">
<input required type="file" name="thefile" id="thefile"><br />
<input type="submit" value="Upload File" name="submit">
</form>
gs file:
var spreadSheetId = 'string-of-my-spreadsheet';
function doPost(e) {
if(typeof e !== 'undefined'){
try {
var folderName = "myfolder";
var folder, folders = DriveApp.getFoldersByName(folderName);
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder(folderName);
}
var blob = e.parameter.thefile;
var fname = blob.getName();
var extensionfinder = /(?:\.([^.]+))?$/;
var ext = extensionfinder(fname)[1];
var sheet = SpreadsheetApp.openById(spreadSheetId).getActiveSheet();
var lastRow = sheet.getLastRow();
var firstCellInRowVal = sheet.getRange(lastRow, 1).getValue();
var newNameArr = firstCellInRowVal.split("-");
var newName;
if (newNameArr[0] == "File") {
newName = newNameArr[0]+"-"+(parseInt(newNameArr[1])+1);
}
else {
newName = 'File-1';
}
blob.setName(newName+'.'+ext);
var file = folder.createFile(blob)
var targetRange = sheet.getRange(lastRow+1, 1, 1, 2).setValues([[newName, file.getUrl()]]);
return ContentService.createTextOutput(newName);
}
catch (error) {
return ContentService.createTextOutput(error.toString());
}
}
}
GAS returns this error:
TypeError: Cannot call method "getName" of undefined.
anyone has solution for this? thx before..
Your code
is just getting the file. To get the blob you would have to use
.getBlob()
so your final code would be: