Heim > Java > javaLernprogramm > Warum schlägt das Hochladen meiner Java HttpClient-Datei auf einen PHP-Server fehl, obwohl die Verbindung erfolgreich ist?

Warum schlägt das Hochladen meiner Java HttpClient-Datei auf einen PHP-Server fehl, obwohl die Verbindung erfolgreich ist?

DDD
Freigeben: 2024-12-07 09:43:12
Original
718 Leute haben es durchsucht

Why is my Java HttpClient file upload to a PHP server failing, even though the connection is successful?

Datei-Upload mit Java HttpClient und PHP

Problem:

Sie möchten eine erstellen Java-Anwendung, die mithilfe der Jakarta HttpClient-Bibliothek Dateien auf einen Apache-Server hochladen kann, auf dem PHP ausgeführt wird. Der PHP-Server verwendet ein einfaches Skript, um die hochgeladenen Dateien zu empfangen und zu speichern. Bei der Ausführung tritt jedoch ein ungewöhnliches Problem auf, bei dem der Datei-Upload fehlschlägt, wie vom PHP-Skript gemeldet. Die Codeausführungsantwort zeigt eine erfolgreiche Verbindung an, aber die Datei bleibt von PHP unbemerkt.

Lösung:

Der ursprüngliche Java-Code, den Sie bereitgestellt haben, enthielt einen Fehler. Die korrekte Implementierung mithilfe der Java HttpClient-Bibliothek ist unten dargestellt:

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();
  }
}
Nach dem Login kopieren

Analyse:

Die wichtigste Änderung ist die Verwendung von MultipartEntity. Im vorherigen Code wurde eine FileEntity verwendet. Allerdings eignet sich MultipartEntity besser für Datei-Uploads, da es die Einbeziehung zusätzlicher Parameter und die Angabe von Inhaltstypen ermöglicht.

Nach der Verwendung von MultipartEntity war der Datei-Upload erfolgreich und die PHP-Datei erhielt den Upload ohne irgendwelche Probleme. Die Funktion is_uploaded_file() gab „true“ zurück und das Array $_FILES wurde ordnungsgemäß mit Daten über die hochgeladene Datei gefüllt.

Das obige ist der detaillierte Inhalt vonWarum schlägt das Hochladen meiner Java HttpClient-Datei auf einen PHP-Server fehl, obwohl die Verbindung erfolgreich ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage