提问人:user3347814 提问时间:10/20/2023 最后编辑:Rubénuser3347814 更新时间:10/21/2023 访问量:99
如何使用 Google App Script 通过 POST 请求发送文件
How to use Google App Script to send a file using POST request
问:
我想使用 Google Apps 脚本将 Google 表格与 API 集成
以下是 API 服务中的文档:
curl --location --request POST 'https://apinew.socialhub.pro/api/sendMessage' \
--form 'api_token="SEU API_TOKEN AQUI"' \
--form 'phone="NUMERO DESTINO"' \
--form 'file=@"DIRETÓRIO DO ARQUIVO"' \
--form 'message="MENSAGEM"'
我设法在Google App Script中创建了一个完美运行的脚本:
function send_message_teste(telephone,message) {
var url = "https://apinew.socialhub.pro/api/sendMessage";
telephone = telephone.toString();
let request = {
"api_token":"MY_TOKEN",
"phone":telephone,
"message":message
};
let resquest_body = JSON.stringify(request);
let config = {
muteHttpExceptions: true,
method: "post",
headers: {
"Content-Type": "application/json"
},
payload:resquest_body
};
let response = UrlFetchApp.fetch(url, config);
var data = JSON.parse(response.getContentText());
return response
}
我的问题是我无法用文件进行这项工作。API 文档只有 curl 示例。我设法将此示例转换为 Google App Script,但是在尝试通过 API 发送文件时遇到了困难。谁能帮我?
答:
3赞
Tanaike
10/21/2023
#1
我相信你的目标如下。
您希望将以下 curl 命令转换为 Google Apps 脚本。
curl --location --request POST 'https://apinew.socialhub.pro/api/sendMessage' \ --form 'api_token="SEU API_TOKEN AQUI"' \ --form 'phone="NUMERO DESTINO"' \ --form 'file=@"DIRETÓRIO DO ARQUIVO"' \ --form 'message="MENSAGEM"'
我以为当我看到你的 curl 命令时,请求是.但是,在显示脚本中,该值似乎是发送的 ad JSON 数据。我认为这可能是您当前问题的原因。当这反映在示例脚本中时,以下示例脚本怎么样?multipart/form-data
示例脚本:
请将 Google 云端硬盘上文件的文件 ID 设置为 。fileId
function send_message_teste(telephone,message) {
const fileId = "###"; // Please set your file ID of the file you want to upload.
var url = "https://apinew.socialhub.pro/api/sendMessage";
telephone = telephone.toString();
let request = {
"api_token": "MY_TOKEN",
"phone": telephone,
"message": message
};
const payload = { ...request, file: DriveApp.getFileById(fileId).getBlob() };
let config = { muteHttpExceptions: true, payload };
let response = UrlFetchApp.fetch(url, config);
var data = JSON.parse(response.getContentText());
return response;
}
- 如果包含,则自动使用 POST 方法。
payload
注意:
我认为这个修改后的脚本的请求与上面的 curl 命令相同。但是,如果发生错误,请再次确认 和 的值。
request
fileId
如果您的 API 中无法使用此修改后的脚本的结构,则可以使用此 Google Apps 脚本库。参考文献(作者:我)
multipart/form-data
参考:
评论
0赞
user3347814
10/21/2023
我知道这可能是一个愚蠢的问题,但你把它放在变量之前有什么作用?...
...request
0赞
user3347814
10/21/2023
顺便说一句,您的代码运行良好!!!!!!!!!!!!!!!!!!!!!!!!!非常感谢!!!!我仍然不明白运算符到底是做什么的,但代码有效!...
3赞
TheMaster
10/21/2023
@user3347814 这是一个点差运算符。您可以在 mdn 中查找它。
1赞
Tanaike
10/21/2023
@user3347814 感谢您的回复和测试。我很高兴您的问题已得到解决。也谢谢你。
1赞
Tanaike
10/22/2023
@user3347814 关于,是的。例如,当有 时,变为 。in this case, is it the same thing as adding another key to the object?
const a = {key1: "value1", key2: "value2"}
const res = {...a, "key3": "value3"}
{key1: "value1", key2: "value2", "key3": "value3"}
评论
post
get
get
, when I am not trying to use the
file
post
get
blob
post