Wie kann ich ein Textfeld in der POST-Anfrage senden, das einen Blob in den Blobstore hochlädt und ihn im Upload-Handler für den Blob abruft?

9

Ich habe einige ähnliche Fragen zu StackOverflow gelesen, habe aber noch keine Lösung für dieses Problem gefunden.

Ich lade einen Blob von Android in den Blobstore von App Engine über einen HTTPPost auf die Upload-URL hoch, die vom Blobstore-Service generiert wurde. Ich möchte in der Lage sein, einige Textmetadaten mit dieser Anfrage zu senden, die diesen Blob identifiziert. Ich möchte diese Informationen zusammen mit dem Blob-Schlüssel im Upload-Handler-Servlet abrufen, der nach dem Hochladen des Blobs aufgerufen wird.

Das Problem besteht darin, dass der Blob mithilfe der mehrteiligen Codierung hochgeladen wird und App Engine den Servlet v3.0-Standard nicht unterstützt. Daher kann req.getPart () nicht verwendet werden, um den Textteil abzurufen. (Das Blob selbst wird vom Blobstore-Dienst zurückgegeben, so dass ein Teil der Anfrage bereits für uns analysiert wurde.)

Wie kann ich dieses Problem umgehen, indem ich nur einen Textparameter zusammen mit der hochgeladenen Datei in den Blobstore übergebe und sie im Servlet abrufe, das nach dem Upload des Blobs aufgerufen wird?

Vielen Dank für Ihre Hilfe! Ziemlich fest auf diesem einen!

Hier ist der Code, den ich für HttpPost unter Android verwende:

%Vor%

UPDATE (08.12.14):

Ich habe vor dem Erstellen der multipart-entity für die HttpPost-Anfrage wie folgt einen text-body zum Entity Builder hinzugefügt:

%Vor%

Für das Servlet, das den Rückruf von Blobstore nach dem Hochladen des Blobs verarbeitet, habe ich die von Google beschriebene Methode verwendet, um eine HttpPost-Anfrage in App Engine zu analysieren diese Anleitung wie unten angegeben:

%Vor%

Wenn ich jedoch die Variable paramNames im Datenspeicher nach dieser Operation überprüfe, bleibt ihr Wert "default". Das bedeutet, dass in der neu geschriebenen POST-Anforderung, die Blobstore an das Upload-Handler-Servlet übergeben hat, kein Formularfeld gefunden wurde. Wohin geht es von hier?

    
Price 07.12.2014, 06:27
quelle

3 Antworten

2

Es gibt eine Möglichkeit, Metadaten mit Ihrem Blob mit den Informationen zu veröffentlichen, die nicht durch einen Blobkey dargestellt werden:

  1. Fügen Sie in Ihrem Upload-Formular Folgendes ein:

    %Vor%
  2. Nun können Sie entweder versteckte Felder hinzufügen:

    %Vor%
  3. Oder Sie können Eingabefelder hinzufügen:

    %Vor%
  4. Stellen Sie in Ihrem Servlet sicher, dass der Post-Handler die Metadaten liest

    %Vor%
  5. Jetzt haben Sie das Upload-Formular mit allen Informationen.

  6. Wenn Sie die Informationen zum Bedienen des Blobs übergeben, können Sie

    verwenden %Vor%

Sie speichern also die Informationen nicht genau im Blob selbst, aber Sie können sie in das Upload-Formular einfügen.

    
Ying Li 14.12.2014, 17:32
quelle
0

Von dem, was ich sagen kann, ist der MultiPartEntityBuilder verantwortlich für das Mocking eines HTML "Formulars" von enctype="multipart / form-data", und wenn Sie die DefaultHttpClient Zeilen erreichen, senden Sie einfach die Anfrage von diesem Formular über POST. Sie sollten in die Dokumentation für den Entity Builder schauen. Es hat eine Funktion zum Hinzufügen von Textfeldern zum "Formular" [1].

[1] - Ссылка

    
DT Rush 07.12.2014 20:48
quelle
0

Nur für den Fall, dass Sie

angeben möchten

entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

nach dem Erstellen des Objekts.

Wenn das nicht funktioniert, ist es möglicherweise ratsam, gegen requestbin zu posten, um genau zu sehen, was Sie erhalten

    
Javier Ramirez 10.12.2014 13:42
quelle