我需要一种方法将图像文件和pdf文件从我们的谷歌驱动器中获取并以编程方式提供给我们的apache服务器。
如果我使用标准HTML5表单执行上传,我的PHP效果很好,这让我相信它写得正确。 (我可能错了)。当我使用谷歌应用程序脚本执行上传时,我收到以下错误。
[06-Aug-2016 16:52:18 America / Chicago] PHP警告:第0行的未知部分中的multipart / form-data POST数据缺少边界
如果我将内容类型参数更改为以下
“contentType”:“multipart / form-data boundary = - ”,
这会使警告消失,但似乎没有文件进入目标服务器。从我自己的研究中我相当肯定,我需要设置这个边界参数,以便一切都能很好地发挥。我也相信默认是双连字符。但在这种情况下似乎不正确。
任何帮助表示赞赏我有点超出我的深度。如果需要更多信息,请告诉我,我会尽可能快地回复。
谢谢,
Chris Pfannkuch - Oregon Gutter
///////////////////////////////////////////////////////////////////
// Google Apps Script - Code.gs
function sendHttpPost()
{
var fileBlob = DriveApp.getFileById("FILEIDHERE").getBlob();
var payload =
{
"fileAttachment": fileBlob
};
// FROM Google Apps Script Documentation.
// Because payload is a JavaScript object, it will be interpreted as
// an HTML form. (We do not need to specify contentType; it will
// automatically default to either 'application/x-www-form-urlencoded'
// or 'multipart/form-data')
// FROM PHP.net documentation.
// Be sure your file upload form has attribute enctype="multipart/form-data"
// otherwise the file upload will not work.
// When I have omitted this parameter I get multiple warnings in my error log
// on my destination server.
var options =
{
"method" : "post",
"contentType" : "multipart/form-data",
"payload" : payload
};
UrlFetchApp.fetch("http://OURDOMAIN.com/SOMEFOLDER/handleHttpPost.php", options);
}
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
//PHP - handleHttpPost.php
<?php
$uploaddir = 'SOMEDIR/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "File is valid, and was successfully uploaded.\n";
}
else
{
echo "Failed.\n";
}
echo 'Here is some more debugging info:';
print_r($_FILES);
echo "</pre>";
?>
///////////////////////////////////////////////////////////////////
编辑:这是我一直在浏览的一些帖子数据。
///////////////////////////////////////////////////////////////////
// POST From standard HTML5 WebForm, works great to upload the pdf file.
http://posttestserver.com/files/2016/08/08/f_12.45.381108844561
///////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////
// POST From UrlFetchApp call.
http://www.posttestserver.com/data/2016/08/08/12.56.43188879461
///////////////////////////////////////////////////////////////////
UrlFetch Call似乎没有将文件视为上传文件。
== Multipart File upload. ==
Received 0 file(s)
当我使用表单时,它会看到该文件。
== Multipart File upload. ==
Received 1 file(s)
0: posted name=fileAttachment
name: OfficeClerk.pdf
type: application/pdf
error: 0
size: 752176
答案 0 :(得分:1)
今天解决了我的问题。我需要包括看似无用的fieldOne和fieldTwo。一旦我这样做,一切都开始很好地协同工作。我在早期调试过程中的某些时候删除了它们是个白痴。
var payload =
{
"fieldOne" : "value for field one",
"fieldTwo" : "value for field two",
"fileAttachment": fileBlob
};