【发布时间】:2014-06-21 09:41:44
【问题描述】:
我需要将文件上传到第三方服务。这些文件是在 Google Drive 上创建的,我得到了它的 blob 数据。
我想创建一个多部分请求,当我执行 UrlFetchApp 发布时,它现在看起来像这样。
这是作为字符串的有效负载。我有一些生成有效负载的代码。正确格式化不是问题,这是它应该的格式。
-----------------0.13accb4c42d338
Content-Disposition: form-data; name="source"; filename="Zzapps.jpg"
Content-Type: application/octet-stream
[[[IMAGE DATA HERE -- OMITTED FOR BREVITY]]]
-----------------0.13accb4c42d338
Content-Disposition: form-data; name="filename"
Zzapps.jpg
-----------------0.13accb4c42d338--
这是执行 UrlFetchApp 命令的代码。
var authHeaders = {
Authorization: 'OAuth2 '+access_token
}
var params = {
accept: "application/json",
method: 'POST',
payload: payload,
contentType: 'multipart/form-data; boundary='+boundaryKey,
headers: authHeaders,
ContentLength: payload.length,
muteHttpExceptions: true
}
var resx = UrlFetchApp.fetch(url, params);
接收方给出错误(缺少来源)。我不确定我的 multipart-post 一开始是否还可以,我没有找到任何测试 URL 来检查我是否正确上传。
如何以正确的方式将 blob 数据作为分段上传发送? 现在我使用 blob.getDataAsString()
【问题讨论】:
-
在这种情况下,我从最简单的硬编码代码开始,我可以开始工作,然后从那里开始。尝试先做一些简单的工作。你看过执行记录以寻找线索吗?您是否使用 Logger.log() 来检查值?您的 params 对象是否被解析为对象?如果你使用 Logger.log('params: ' + params);你应该看到 [object:Object] 作为 params 的值。
-
是的。我正在尝试发送一个有效的硬编码代码。我看不出能做到这一点。我希望多部分代码是 params.payload 参数中的字符串?
-
我知道这可能有点太晚了,但在这篇文章中——ctrlq.org/code/20096-upload-files-multipart-post——这家伙成功了。
-
这些信息对您的情况有用吗? github.com/tanaikech/FetchApp
标签: google-apps-script multipartform-data