我创建了一个脚本,用于使用post方法将文件从本地上传到Google云端硬盘,我尝试使用curl进行上传,但无法正常工作,并且出现错误Could not decode string.
Google Apps脚本代码:
function doPost(e) {
var folder, folders = DriveApp.getFoldersByName("Uploads");
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder("Uploads");
}
var data = Utilities.base64Decode(e.parameters.data);
var blob = Utilities.newBlob(data, e.parameters.mimetype, e.parameters.filename);
var id = "Your File Download Link: https://drive.google.com/uc?id="+folder.createFile(blob).getId();
return ContentService.createTextOutput(id)
}
我的curl命令:
curl -i -X POST -H 'Content-Type: multipart/form-data' -F 'data=test.png' https://script.google.com/macros/s/AKfycbwcGij0UNl8c9OJEpHbUvGF4KTJYbBOkDA9m882BLJVnWpFrc4/exec
答案 0 :(得分:1)
我认为您的情况需要同时修改Google Apps脚本和curl命令。
multipart/form-data
。e.parameters
是数组。在这种情况下,请使用e.parameter
。当以上几点反映到脚本和curl命令时,它如下所示。
function doPost(e) {
var folder, folders = DriveApp.getFoldersByName("Uploads");
if (folders.hasNext()) {
folder = folders.next();
} else {
folder = DriveApp.createFolder("Uploads");
}
var data = Utilities.base64Decode(e.postData.contents.split("data=")[1]);
var blob = Utilities.newBlob(data, e.parameter.mimetype, e.parameter.filename);
var id = "Your File Download Link: https://drive.google.com/uc?id="+folder.createFile(blob).getId();
return ContentService.createTextOutput(id);
}
base64 test.png | curl -L --data-raw "data=$(</dev/stdin)" "https://script.google.com/macros/s/###/exec?filename=test.png&mimetype=image/png"
https://script.google.com/macros/s/###/exec
的网址。Execute the app as: Me
Who has access to the app: Anyone, even anonymous