Heim >Java >javaLernprogramm >Wie lade ich Dateien korrekt vom Java HttpClient auf einen PHP-Server hoch?

Wie lade ich Dateien korrekt vom Java HttpClient auf einen PHP-Server hoch?

Susan Sarandon
Susan SarandonOriginal
2024-12-01 17:30:12293Durchsuche

How to Correctly Upload Files from Java HttpClient to a PHP Server?

Java HttpClient mit PHP-Datei-Upload

In diesem Artikel erfahren Sie, wie Sie die Java HttpClient-Bibliothek Version 4.0 Beta2 zum Hochladen einer Datei verwenden an einen Apache-Server, auf dem PHP ausgeführt wird.

Szenario und Problem

Ein Entwickler möchte eine Datei über die Jakarta HttpClient-Bibliothek von Java nach PHP übertragen. Beim Ausführen der Anfrage erkennt der PHP-Server die hochgeladene Datei jedoch nicht. Die Funktion is_uploaded_file() gibt false zurück und die Variable $_FILES bleibt leer.

Lösung

Um dies zu beheben, müssen wir den Java-Code überarbeiten. Das Problem ist auf die falsche Verwendung der FileEntity zurückzuführen. Hier ist der korrigierte Code:

import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;


public class PostFile {
  public static void main(String[] args) throws Exception {
    HttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);

    HttpPost httppost = new HttpPost("http://localhost:9001/upload.php");
    File file = new File("c:/TRASH/zaba_1.jpg");

    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody cbFile = new FileBody(file, "image/jpeg");
    mpEntity.addPart("userfile", cbFile);


    httppost.setEntity(mpEntity);
    System.out.println("executing request " + httppost.getRequestLine());
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();

    System.out.println(response.getStatusLine());
    if (resEntity != null) {
      System.out.println(EntityUtils.toString(resEntity));
    }
    if (resEntity != null) {
      resEntity.consumeContent();
    }

    httpclient.getConnectionManager().shutdown();
  }
}

Die Schlüsseländerung besteht in der Verwendung von MultipartEntity anstelle von FileEntity. Dadurch können wir die Datei als mehrteilige Formulardatenanforderung senden, was dem erwarteten Format für PHP-Datei-Uploads entspricht.

Das obige ist der detaillierte Inhalt vonWie lade ich Dateien korrekt vom Java HttpClient auf einen PHP-Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn