Téléchargement d'un fichier sur un serveur Apache avec PHP à l'aide de Jakarta HttpClient
Dans cet article, nous explorerons un scénario courant : le téléchargement d'un depuis une application Java vers un serveur Apache exécutant PHP. Nous utiliserons la bibliothèque Jakarta HttpClient version 4.0 beta2 pour faciliter le transfert de fichiers.
Problème :
Un développeur a rencontré un problème en essayant de télécharger un fichier à l'aide de HttpClient 4.0. bêta2. Malgré une communication réussie avec le serveur, la méthode is_uploaded_file a renvoyé false et la variable $_FILES est restée vide, indiquant que PHP n'a pas reçu le fichier.
Solution :
Le code Java incorrect utilisé précédemment a été remplacé par une version corrigé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(); } }
Explication :
L'erreur d'origine a été provoquée par l'utilisation d'une FileEntity pour le téléchargement de fichiers, ce qui n'était pas la méthode appropriée. Le code mis à jour utilise une MultipartEntity pour créer une requête HTTP multipart/form-data, qui suit le protocole standard pour les téléchargements de fichiers. En utilisant le format de demande correct, le serveur peut désormais recevoir et traiter avec succès 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!