Hochladen einer Datei auf einen Apache-Server mit PHP mithilfe von Jakarta HttpClient
In diesem Artikel untersuchen wir ein häufiges Szenario: das Hochladen einer Datei von einer Java-Anwendung auf einen Apache-Server, auf dem PHP ausgeführt wird. Wir verwenden die Jakarta HttpClient-Bibliothek Version 4.0 Beta2, um die Dateiübertragung zu erleichtern.
Problem:
Ein Entwickler ist beim Versuch, eine Datei mit HttpClient 4.0 hochzuladen, auf ein Problem gestoßen Beta2. Trotz erfolgreicher Kommunikation mit dem Server gab die Methode is_uploaded_file false zurück und die Variable $_FILES blieb leer, was darauf hinweist, dass PHP die Datei nicht empfangen hat.
Lösung:
Der zuvor verwendete fehlerhafte Java-Code wurde durch eine korrigierte Version ersetzt unten:
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(); } }
Erklärung:
Der ursprüngliche Fehler wurde durch die Verwendung einer FileEntity zum Datei-Upload verursacht, was nicht die geeignete Methode war. Der aktualisierte Code verwendet eine MultipartEntity, um eine Multipart-/Formulardaten-HTTP-Anfrage zu erstellen, die dem Standardprotokoll für Datei-Uploads folgt. Durch die Verwendung des richtigen Anforderungsformats kann der Server nun die hochgeladene Datei erfolgreich empfangen und verarbeiten.
Das obige ist der detaillierte Inhalt vonWie lade ich mit Jakarta HttpClient erfolgreich eine Datei von Java auf einen Apache-Server hoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!