Dalam percubaan untuk memuat naik fail dari Java ke pelayan Apache menggunakan PHP, aplikasi Java telah dicipta dengan memanfaatkan Jakarta Pustaka HttpClient versi 4.0 beta2. Walau bagaimanapun, skrip PHP gagal mengecam fail yang dimuat naik, mengakibatkan tatasusunan $_FILES kosong.
Kod Java awal tidak betul, seperti yang terbukti daripada versi yang diubah suai di bawah:
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(); } }
Perbezaan utama terletak pada penggunaan MultipartEntity, yang membolehkan pengendalian fail yang betul muat naik.
Skrip PHP kekal tidak berubah:
<?php if (is_uploaded_file($_FILES['userfile']['tmp_name'])) { echo "File ". $_FILES['userfile']['name'] ." uploaded successfully.\n"; move_uploaded_file ($_FILES['userfile'] ['tmp_name'], $_FILES['userfile'] ['name']); } else { echo "Possible file upload attack: "; echo "filename '". $_FILES['userfile']['tmp_name'] . "'."; print_r($_FILES); } ?>
Dengan menggunakan MultipartEntity dalam kod Java, isu Skrip PHP yang gagal mengesan fail yang dimuat naik telah diselesaikan, dan fail itu boleh berjaya dipindahkan dan diproses pada pelayan.
Atas ialah kandungan terperinci Mengapakah fail Java HttpClient saya dimuat naik ke pelayan PHP gagal, dan bagaimana saya boleh membetulkannya menggunakan MultipartEntity?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!