How to Successfully Upload a File Using Java HttpClient Library and PHP
When attempting to upload a file from a Java application to an Apache server running PHP using the Jakarta HttpClient library, you may encounter the following issue:
Problem Statement:
A Java application using the Jakarta HttpClient library to upload a file to an Apache server with PHP fails to register the file in PHP. The is_uploaded_file method returns false, and the $_FILES variable remains empty.
Solution:
The provided Java code contained an error that prevented successful file upload. The following corrected Java class addresses this issue:
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(); } }
Explanation:
The key difference between the previous and corrected Java code lies in the use of MultipartEntity. The PHP script expects data in a multipart/form-data format, which the previous code did not adhere to. By using MultipartEntity, the data is formatted correctly and the file upload process can be completed successfully.
The above is the detailed content of Why Does My Java HttpClient File Upload to PHP Fail, and How Can I Fix It?. For more information, please follow other related articles on the PHP Chinese website!