【发布时间】:2019-11-23 05:07:20
【问题描述】:
我正在尝试使用 Google App 脚本和 React 上传文件。
谷歌脚本:
function uploadArquivoParaDrive(base64Data, nomeArq, idPasta) {
try{
var splitBase = base64Data.split(','),
type = splitBase[0].split(';')[0].replace('data:','');
var byteCharacters = Utilities.base64Decode(splitBase[1]);
var ss = Utilities.newBlob(byteCharacters, type);
ss.setName(nomeArq);
var file = DriveApp.getFolderById(idPasta).createFile(ss);
return file.getName();
}catch(e){
return 'Erro: ' + e.toString();
}
}
我可以运行这个蚂蚁,它可以工作:
function uploadFile() {
var image = UrlFetchApp.fetch('url to some image').getBlob();
var file = {
title: 'google_logo.png',
mimeType: 'image/png'
};
file = Drive.Files.insert(file, image);
Logger.log('ID: %s, File size (bytes): %s', file.id, file.fileSize);
}
这是 React 脚本:
onSubmit = (e) => {
e.preventDefault();
axios.get(url, {...this.state}, {
headers: {
'Content-Type': 'multipart/form-data'
}
}, (response) => {
console.log(response);
})
};
setFile = (event) => {
console.log(event.target.files)
this.setState({file: event.target.files[0]});
};
render() {
return (
<form>
<input type="file" id="file" onChange={this.setFile} />
<button onClick={this.onSubmit}>ADD</button>
</form>
)
}
我正在尝试使用 POST,但我收到了 400 个响应。我知道这不可能是 GET 请求,但是有了它,我得到了 - 200 没有响应。
我可以在工作表中插入行,但我想使用 Google App Scripts 将文件上传到 Google 云端硬盘。
我知道有一种方法可以通过 Google Scripts 和 React 上传文件,因为有一种方法可以不使用 React (google.script.run)。
【问题讨论】:
-
服务器接收脚本
doPost()在哪里? -
您好,但是如何将请求连同文件一起发送到
doPost()? -
首先,您的 POST 接收器在哪里?应该有一个 doPost() 函数服务器端来接收文件。它在哪里?其次,我不认为
multipart/form-data与文件一起使用,您需要将其作为application/x-www-form-urlencoded发送,或者多部分数据标题中的文件部分不应该有filename:,这样数据就不会被解释为文件服务器端,但作为 blob 数据
标签: javascript reactjs google-apps-script