it-swarm.com.de

Wie formatiere ich eine POST - Anforderung an die Datei_upload Rest Response korrekt?

Ich stelle zum ersten Mal eine StackExchange-Frage. Vielen Dank im Voraus für Ihre Geduld.

Wir versuchen, ein Bild mit der File Upload Drupal Ressource . Beim Testen des Endpunkts mit Postman in eine kopflose REST -Anwendung hochzuladen Wir sind auf ein seltsames Problem gestoßen. Wir sind in der Lage, auf den Endpunkt zu zielen und ein Bild über Postmans 'binären' Körpertyp hochzuladen, bei dem Sie einfach ein Bild an die GUI anhängen und es den Rest für Sie erledigt. Aber wenn Wir verwenden den 'rohen' Körpertyp und übergeben den Base64-Code für das Bild. Die Bildentität wird erstellt, aber das tatsächliche wird in Drupal als fehlerhaft angezeigt. Gemäß der verknüpften Dokumentation müssen die Binärdaten nur direkt mit übergeben werden die entsprechenden Überschriften.

Meine Fragen lauten also: Gibt es eine bestimmte Möglichkeit, Base64-Bildinformationen zu formatieren oder zu verpacken, um sie direkt auf Drupal hochzuladen? Bin ich fälschlicherweise mit Base64 und Binärdaten gleichgesetzt? Hat jemand ähnliche Erfahrungen? Vielen Dank, dass Sie sich eine Sekunde Zeit genommen haben, um dies zu lesen.

Zum Kontext:

Unser Endpunkt ist in beiden Fällen http://localhost:8000/file/upload/{entity_type_id}/{bundle}/{field_name}?_format=json

Und unsere Überschriften sind:

Content-Disposition: file;filename="test.jpg"
Content-Type: application/octet-stream

Und wenn wir versuchen, eine Vorschau des Bildes in Drupal nach direktem Übergeben des Base64) anzuzeigen, sieht die Vorschau folgendermaßen aus (ein bedrohliches weiß umrandetes Quadrat auf schwarzem Hintergrund):

(White square on black background

1
Kevin

Vor kurzem habe ich das gleiche Problem bei einem Datei-Upload festgestellt. Dafür habe ich base64_decode () vor file_save_data () in Drupal erstellt. Beispielcode:

  if (isset($file_data['title']) && isset($file_data['data'])) {
      // Get base64_encode of file data and explode to get data.
      $encodedImgString = explode(',', $file_data['data'], 2)[1];
      // Decode the data.
      $decodedImgString = base64_decode($encodedImgString);
      // Get the file name.
      $file_name = preg_replace('/\\.[^.\\s]{3,4}$/', '', $file_data['title']);*/
      // Save the file using base_decode() data.
      $file = file_save_data($decodedImgString, 'public://' . $file_data['title'], FILE_EXISTS_RENAME);
      $file_result = [
        'target_id' => $file->id(),
        'title' => $file_data['title'],
      ];
    }

Hoffe das hilft dir.

Hinweis: Hier habe ich die benutzerdefinierte REST API für das Hochladen von Dateien. verwendet

1
Ajay Reddy