php Google Apps脚本将PDF和IMAGE数据发布到外部Apache服务器

dzjeubhm  于 2023-09-29  发布在  PHP
关注(0)|答案(3)|浏览(93)

我需要一种方法来获得图像文件和pdf文件从我们的谷歌驱动器和我们的apache服务器编程。
如果我使用标准的HTML5表单来执行上传,我的PHP工作得很好,这让我相信它是正确编写的。(我可能错了)。当我使用谷歌应用程序脚本执行上传时,我得到以下错误。
[06-Aug-2016 16:52:18 America/芝加哥] PHP警告:第0行上未知的多部分/表单数据POST数据中缺少边界
如果我将内容类型参数更改为以下内容
“contentType”:“multipart/form-data boundary=--",
这会使警告消失,但似乎没有文件到达目标服务器。从我自己的研究中,我相当确定我需要设置这个边界参数,以便一切都能很好地发挥作用。我还认为默认设置是双连字符。但在这种情况下似乎不正确。
任何帮助都是感激的,我在这里有点超出我的能力范围。如果需要更多的信息,请让我知道,我会尽快作出回应。
谢谢你,
Chris Pfannkuch -俄勒冈州排水沟

///////////////////////////////////////////////////////////////////
// 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调用似乎未将该文件视为上载文件。

== 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
uxhixvfz

uxhixvfz1#

今天解决了我的问题。我需要包括看似无用的fieldOne和fieldTwo。一旦我这样做了,一切都开始很好地工作在一起。我是一个白痴,因为我在早期调试过程中的某个时候删除了它们。

var payload =
   {
     "fieldOne" : "value for field one",
     "fieldTwo" : "value for field two",
     "fileAttachment": fileBlob
   };
sqyvllje

sqyvllje2#

谢谢分享
请注意,给定的代码将不会按原样工作,google脚本使用标签“fileAttachment”,而php代码使用标签“userfile
它们需要完全相同才能工作。
我不得不修改googlescript以使其工作:

var payload =
       {
         "userfile": fileBlob
       };
uqzxnwby

uqzxnwby3#

到2023年9月,在原来的职位上有两个变化。格雷瓜尔和...
删除"contentType" : "multipart/form-data",看起来fetch自己处理它,如果指示“multipart/form-data”,则函数根本不工作。

相关问题