Maison >Java >javaDidacticiel >Pourquoi le téléchargement de mon fichier Java HttpClient vers PHP échoue-t-il, malgré une demande et une réponse réussies ?

Pourquoi le téléchargement de mon fichier Java HttpClient vers PHP échoue-t-il, malgré une demande et une réponse réussies ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-02 18:06:13332parcourir

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

Télécharger des fichiers avec Java HttpClient et PHP

Dans ce scénario, vous essayez de télécharger un fichier sur Apache avec PHP à l'aide de Java Bibliothèque HttpClient version 4.0 bêta2. Cependant, la méthode is_uploaded_file renvoie false et la variable $_FILES reste vide, malgré une requête et une réponse apparemment réussies.

Cause

Le code Java d'origine est incorrect. Pour résoudre ce problème, utilisez la classe mise à jour suivante :

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();
  }
}

La principale distinction est l'utilisation de MultipartEntity. L'implémentation originale ne disposait pas de ce composant essentiel, ce qui entraînait l'incapacité du script PHP à reconnaître le fichier téléchargé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn