Maison >Java >javaDidacticiel >Pourquoi le téléchargement de mon fichier Java HttpClient sur un serveur PHP échoue-t-il, même si la connexion réussit ?

Pourquoi le téléchargement de mon fichier Java HttpClient sur un serveur PHP échoue-t-il, même si la connexion réussit ?

DDD
DDDoriginal
2024-12-07 09:43:12696parcourir

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

Téléchargement de fichiers à l'aide de Java HttpClient et PHP

Problème :

Vous souhaitez créer un Application Java permettant de télécharger des fichiers sur un serveur Apache exécutant PHP à l'aide de la bibliothèque Jakarta HttpClient. Le serveur PHP utilise un script simple pour recevoir et stocker les fichiers téléchargés. Cependant, lors de l'exécution, vous rencontrez un problème inhabituel d'échec du téléchargement du fichier, comme indiqué par le script PHP. La réponse d'exécution du code indique une connexion réussie, mais le fichier reste inaperçu par PHP.

Solution :

Le code Java initial que vous avez fourni contenait une erreur. L'implémentation correcte à l'aide de la bibliothèque Java HttpClient est présentée ci-dessous :

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

Analyse :

La modification clé est l'utilisation de MultipartEntity. Dans le code précédent, une FileEntity était utilisée. Cependant, MultipartEntity est plus adapté aux téléchargements de fichiers, car il permet l'inclusion de paramètres supplémentaires et la spécification des types de contenu.

Après avoir utilisé MultipartEntity, le téléchargement du fichier a réussi et le fichier PHP a reçu le téléchargement sans tout problème. La fonction is_uploaded_file() a renvoyé true et le tableau $_FILES a été correctement rempli avec des données sur 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