Heim >Java >javaLernprogramm >Warum schlägt das Hochladen meiner Java HttpClient-Datei nach PHP trotz erfolgreicher Anfrage und Antwort fehl?

Warum schlägt das Hochladen meiner Java HttpClient-Datei nach PHP trotz erfolgreicher Anfrage und Antwort fehl?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-02 18:06:13337Durchsuche

Why is my Java HttpClient file upload to PHP failing, despite a successful request and response?

Dateien mit Java HttpClient und PHP hochladen

In diesem Szenario versuchen Sie, eine Datei mit PHP unter Verwendung von Java auf Apache hochzuladen HttpClient-Bibliothek Version 4.0 Beta2. Die Methode is_uploaded_file gibt jedoch false zurück und die Variable $_FILES bleibt trotz einer scheinbar erfolgreichen Anfrage und Antwort leer.

Ursache

Der ursprüngliche Java-Code ist falsch. Um dieses Problem zu beheben, verwenden Sie die folgende aktualisierte Klasse:

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 besteht in der Verwendung von MultipartEntity. Der ursprünglichen Implementierung fehlte diese wesentliche Komponente, was dazu führte, dass das PHP-Skript die hochgeladene Datei nicht erkennen konnte.

Das obige ist der detaillierte Inhalt vonWarum schlägt das Hochladen meiner Java HttpClient-Datei nach PHP trotz erfolgreicher Anfrage und Antwort fehl?. 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