Java HttpClient dengan Muat Naik Fail PHP
Dalam artikel ini, kami meneroka cara menggunakan perpustakaan Java HttpClient versi 4.0 beta2 untuk memuat naik fail ke pelayan Apache yang menjalankan PHP.
Senario dan Isu
Pemaju bertujuan untuk memindahkan fail dari Java ke PHP melalui perpustakaan HttpClient Jakarta. Walau bagaimanapun, apabila melaksanakan permintaan, pelayan PHP tidak mengesan fail yang dimuat naik. Fungsi is_uploaded_file() mengembalikan palsu, dan pembolehubah $_FILES kekal kosong.
Penyelesaian
Untuk membetulkannya, kita perlu menyemak semula kod Java. Masalahnya berpunca daripada penggunaan FileEntity yang salah. Berikut ialah kod yang diperbetulkan:
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(); } }
Perubahan utama ialah menggunakan MultipartEntity dan bukannya FileEntity. Ini membolehkan kami menghantar fail sebagai permintaan data borang berbilang bahagian, iaitu format yang dijangkakan untuk muat naik fail PHP.
Atas ialah kandungan terperinci Bagaimana untuk Memuat naik Fail dengan betul dari Java HttpClient ke Pelayan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!