2016-08-06 11 views
0

Ich brauche eine Möglichkeit, Bilddateien und PDF-Dateien aus unserem Google Drive und über unseren Apache-Server programmgesteuert zu erhalten.Google Apps Script, um PDF- und IMAGE-Daten an externe Apache-Server zu senden

Mein PHP funktioniert gut, wenn ich ein Standard-HTML5-Formular verwende, um den Upload durchzuführen, was zu der Annahme führt, dass es korrekt geschrieben wurde. (Ich kann mich irren). Wenn ich das Google Apps-Skript verwende, um den Upload durchzuführen, erhalte ich den folgenden Fehler.

[06-Aug-2016 16.52.18 America/Chicago] PHP Warnung: Fehlende Grenze in multipart/form-data POST-Daten in Unknown on line 0

Wenn ich den Inhalt ändern Typ-Parameter auf die folgenden

"content": "multipart/form-data boundary = -"

Dies macht die Warnung geht weg, aber keine Datei scheint um es zum Zielserver zu machen. Ich bin ziemlich sicher von meiner eigenen Forschung, dass ich diesen Grenzparameter für alles einstellen muss, um gut zu spielen. Ich glaube auch, dass der Standardwert der doppelte Bindestrich ist. Aber es scheint in diesem Fall nicht richtig zu sein.

jede Hilfe ist willkommen Ich bin hier ein wenig überfordert. Wenn mehr Informationen benötigt werden, lassen Sie es mich wissen und ich werde so schnell wie möglich antworten.

Danke,

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>"; 
?> 
/////////////////////////////////////////////////////////////////// 

EDIT: Hier einige Post-Daten, die ich durch gesucht haben.

/////////////////////////////////////////////////////////////////// 
// 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 
/////////////////////////////////////////////////////////////////// 

Der Aufruf von UrlFetch scheint die Datei nicht als eine hochgeladene Datei zu sehen.

Wenn ich das Formular verwende, sieht es die Datei.

== Multipart File upload. == 
Received 1 file(s) 
0: posted name=fileAttachment 
    name: OfficeClerk.pdf 
    type: application/pdf 
    error: 0 
    size: 752176 

Antwort

0

löste mein Problem heute. Ich musste das scheinbar nutzlose fieldOne und fieldTwo einbeziehen. Sobald ich es getan hatte, fing alles an, gut zusammen zu arbeiten. Ich bin ein Idiot dafür, dass ich sie irgendwann in meinem frühen Debugging-Prozess entfernt habe.

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