Maison >Java >javaDidacticiel >Comment télécharger correctement des fichiers de Java HttpClient vers un serveur PHP ?
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!