Rumah >pembangunan bahagian belakang >tutorial php >Mengapakah fail Java HttpClient saya dimuat naik ke pelayan PHP gagal, dan bagaimana saya boleh membetulkannya menggunakan MultipartEntity?

Mengapakah fail Java HttpClient saya dimuat naik ke pelayan PHP gagal, dan bagaimana saya boleh membetulkannya menggunakan MultipartEntity?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-19 15:44:10524semak imbas

Why is my Java HttpClient file upload to a PHP server failing, and how can I fix it using MultipartEntity?

Memuat naik Fail melalui HttpClient Java dengan PHP

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.

Pelaksanaan Java

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

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);
}
?>

Kesimpulan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn