2013-08-20 6 views
5

Ich versuche, FineUploaders neue Funktion zu verwenden, die direkten Upload zu Amazon S3 ermöglicht. Momentan kann ich keine Fotos hochladen. Ich erhalte den Fehler: "Ungültige Richtliniendokumente oder Anforderungsheader!"Empfangen ungültiger Richtlinie Dokument oder Anfrage Kopfzeilen Fehler bei der Verwendung von FineUploader für Amazon S3

Die Entwickler haben gefragt, dass Fragen hier bei stackoverflow gestellt werden.

verfolge ich ihre Anweisungen auf dieser Seite:

http://blog.fineuploader.com/2013/08/16/fine-uploader-s3-upload-directly-to-amazon-s3-from-your-browser/#guide

Dinge In der Einrichtung, ich habe emuliert auch die Beispieldatei dort verknüpft: https://github.com/Widen/fine-uploader-server/blob/master/php/s3/s3demo.php

ich mein Javascript eingerichtet haben also mit sehr wenigen Optionen:

$('#fineuploader-s3').fineUploaderS3({ 
      request: { 
       endpoint: "http://thenameofmybucket.s3.amazonaws.com", 
       accessKey: “mypublicaccesskey” 
      }, 

      signature: { 
       endpoint: "s3demo.php" 
      }, 

      iframeSupport: { 
       localBlankPagePath: "/success.html" 
      }, 

     cors: { 
       expected: true 
      } 
    }); 

Ich weiß, es gibt viele p Schnürsenkel, wo dies für mich schief gehen könnte. Ich habe noch nie zuvor s3 oder fineuloader benutzt, also tut mir leid, wenn das dumme Fragen sind. Aber hier sind die Orte, an denen ich mich beim Aufbau am verwirrtesten fühlte. Ich habe das Problem das Gefühl liegt in # 1:

(1) Im Beispiel Javascript, das ist, wie der Weg zur Signatur eingerichtet ist:

// REQUIRED: Path to our local server where requests can be signed. 
      signature: { 
     endpoint: "/s3/signtureHandler" 
      }, 

ich nicht sicher war, ob damit gemeint ist eine leere Datei zu sein, wo ein JSON erstellt wird oder auf das PHP-Skript zeigen soll, wo die Funktion zum Erstellen des JSons ist, in meinem Fall s3demo.php, das ich direkt kopiert habe.

(2) In der s3demo.php Datei, die nur Zeilen, die ich geändert waren diese:

$clientPrivateKey = $_SERVER['I put my private key here']; 

$expectedBucket = "http://thenameofmybucket.s3.amazonaws.com"; 

function handlePreflightedRequest() { 
    // If you are relying on CORS, you will need to adjust the allowed domain here. 
    header('Access-Control-Allow-Origin: http://mywebsitename.org'); 
} 

(3) Das ist, was ich für meine CORS-Datei habe, war ich nicht sicher, ob es Recht, weil die Beispiele auf der Lehr-Seite nicht die Tags enthalten:

<CORSRule> 
     <AllowedOrigin>http://mywebsitename.org</AllowedOrigin> 
     <AllowedMethod>POST</AllowedMethod> 
     <MaxAgeSeconds>3000</MaxAgeSeconds> 
     <AllowedHeader>*</AllowedHeader> 
    </CORSRule> 

(4) Wie in der Anleitung ausführlich, ging ich in IAM-Panel und eine Gruppe mit der Politik von den Anweisungen genau kopiert erstellt, aber mit dem tatsächlichen Namen meines Eimers:

, dann ein Benutzer, von dem ich die öffentlichen und privaten Zugangsschlüssel in den Javascript-und PHP-Dateien jeweils verwendet. Der Benutzername ist nicht speziell in den Skripten verwendet.

Ich hoffe, es gibt etwas wirklich offensichtlich, dass ich hier falsch gemacht habe. Vielen Dank für Ihre Zeit.

+1

Um Frage (1) zu beantworten. Die Option "signature.endpoint" sollte auf das PHP-Skript verweisen. –

Antwort

2

Wenn ich richtig verstanden habe, sehen Sie die Meldung "Ungültiges Richtliniendokument ..." clientseitig, wenn Sie versuchen, die Anfrage für einen einfachen Upload zu signieren. Sie verwenden auch das s3demo.php bereitgestellte PHP serverseitige Beispiel. Das größte Problem, das ich bei Ihren Änderungen sehe, ist die Variable $expectedBucket. Dein Eimer ist nicht "http://thenameofmybucket.s3.amazonaws.com", es ist "thenameofmybucket". Höchstwahrscheinlich lehnt der serverseitige Code die Richtlinie ab, da sie einen Bucket mit dem Namen "http://thenameofmybucket.s3.amazonaws.com" erwartet, wenn ich sicher bin, dass Ihr Bucket tatsächlich "thenameofmybucket" heißt. Ändern Sie diese Zeile in $expectedBucket = "thenameofmybucket";.

Außerdem ist nicht klar, wo Sie Ihren clientseitigen geheimen Schlüssel basierend auf Ihrer Frage speichern. Wenn Ihr geheimer Schlüssel beispielsweise "12345" ist, haben Sie eine Codezeile, die so aussieht?

$clientPrivateKey = $_SERVER['12345'];

Wenn ja, ist dies ein weiteres Problem mit dem serverseitigen Code. Der Superglobal $_SERVER in PHP sucht nach einer Umgebungsvariablen namens "12345", die vermutlich Ihren geheimen Schlüssel enthält. Wenn Sie eine solche Variable nicht eingerichtet haben, tun Sie dies entweder oder stellen Sie einfach den Wert $clientPrivateKey auf Ihren geheimen Schlüssel ein.

Arbeiten Sie auch wirklich in einer herkunftsübergreifenden Umgebung? Es sieht nicht so aus wie du bist. Dann brauchen Sie im PHP-Beispiel keines der Dinge, die mit "CORS" oder "Cross-Origin" oder "Cross-Domain" gekennzeichnet sind.

UPDATE:
Sie auch die $expectedMaxSize global zu null setzen soll, wenn Sie keine Größenbeschränkung Beschränkungen für Uploads festlegen. Wir aktualisieren die PHP example for Fine Uploader S3 jetzt mit ein paar Verbesserungen und Klarstellungen, die anderen in Zukunft helfen sollen.

+0

Vielen Dank, dass Sie all diese Fehler behoben haben. Ich habe $ expectedBucket geändert und die Codezeile mit meinem Schlüssel festgelegt. Aber ich bekomme immer noch denselben Fehler, also denke ich, dass da noch etwas falsch ist. –

+0

@EBlair Funktioniert alles jetzt? –

+0

Danke für die Nachfrage - leider nein. Muss ich einige der CORS-Code aus dem PHP-Beispiel entfernen? –