Bei dem Versuch, eine Datei von Java auf einen Apache-Server mit PHP hochzuladen, wurde eine Java-Anwendung erstellt, die Jakarta nutzt HttpClient-Bibliothek Version 4.0 Beta2. Allerdings erkannte das PHP-Skript die hochgeladene Datei nicht, was zu einem leeren $_FILES-Array führte.
Der ursprüngliche Java-Code war falsch, wie aus der geänderten Version unten hervorgeht:
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(); } }
Der Hauptunterschied liegt in der Verwendung von MultipartEntity, das die ordnungsgemäße Handhabung von Dateien ermöglicht Uploads.
Das PHP-Skript bleibt unverändert:
<?php if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n"; move_uploaded_file ($_FILES['userfile'] ['tmp_name'], $_FILES['userfile'] ['name']); } else { echo "Possible file upload attack: "; echo "filename '". $_FILES['userfile']['tmp_name'] . "'."; print_r($_FILES); } ?>
Durch die Verwendung von MultipartEntity im Java-Code wird das Problem der Das Problem, dass das PHP-Skript die hochgeladene Datei nicht erkennen konnte, wurde behoben und die Datei konnte erfolgreich übertragen und auf dem Server verarbeitet werden.
Das obige ist der detaillierte Inhalt vonWarum schlägt das Hochladen meiner Java HttpClient-Datei auf einen PHP-Server fehl und wie kann ich das Problem mit MultipartEntity beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!