Maison >Java >javaDidacticiel >Comment télécharger correctement des fichiers de Java HttpClient vers un serveur PHP ?

Comment télécharger correctement des fichiers de Java HttpClient vers un serveur PHP ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-01 17:30:12280parcourir

How to Correctly Upload Files from Java HttpClient to a PHP Server?

Java HttpClient avec téléchargement de fichiers PHP

Dans cet article, nous explorons comment utiliser la bibliothèque Java HttpClient version 4.0 beta2 pour télécharger un fichier à un serveur Apache exécutant PHP.

Scénario et Problème

Un développeur vise à transférer un fichier de Java vers PHP via la bibliothèque Jakarta HttpClient. Cependant, lors de l'exécution de la requête, le serveur PHP ne détecte pas le fichier téléchargé. La fonction is_uploaded_file() renvoie false et la variable $_FILES reste vide.

Solution

Pour remédier à cela, nous devons réviser le code Java. Le problème provient d’une utilisation incorrecte de FileEntity. Voici le code corrigé :

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

Le changement clé consiste à utiliser MultipartEntity au lieu de FileEntity. Cela nous permet d'envoyer le fichier sous forme de demande de données de formulaire en plusieurs parties, qui est le format attendu pour les téléchargements de fichiers PHP.

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