Cara Berjaya Memuat Naik Fail Menggunakan Java HttpClient Library dan PHP
Apabila cuba memuat naik fail daripada aplikasi Java ke pelayan Apache menjalankan PHP menggunakan perpustakaan Jakarta HttpClient, anda mungkin menghadapi isu berikut:
Masalah Pernyataan:
Aplikasi Java menggunakan perpustakaan Jakarta HttpClient untuk memuat naik fail ke pelayan Apache dengan PHP gagal mendaftarkan fail dalam PHP. Kaedah is_uploaded_file mengembalikan palsu dan pembolehubah $_FILES kekal kosong.
Penyelesaian:
Kod Java yang disediakan mengandungi ralat yang menghalang muat naik fail berjaya. Kelas Java yang diperbetulkan berikut menangani isu ini:
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(); } }
Penjelasan:
Perbezaan utama antara kod Java yang sebelumnya dan yang diperbetulkan terletak pada penggunaan MultipartEntity. Skrip PHP menjangkakan data dalam format berbilang bahagian/data bentuk, yang tidak dipatuhi oleh kod sebelumnya. Dengan menggunakan MultipartEntity, data diformat dengan betul dan proses muat naik fail boleh diselesaikan dengan jayanya.
Atas ialah kandungan terperinci Mengapa Fail Java HttpClient Saya Dimuat Naik ke PHP Gagal, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!