"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يفشل تحميل ملف Java HttpClient إلى خادم PHP، وكيف يمكنني إصلاحه باستخدام MultipartEntity؟

لماذا يفشل تحميل ملف Java HttpClient إلى خادم PHP، وكيف يمكنني إصلاحه باستخدام MultipartEntity؟

تم النشر بتاريخ 2024-12-23
تصفح:428

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

تحميل ملف عبر HttpClient الخاص بـ Java باستخدام PHP

في محاولة لتحميل ملف من Java إلى خادم Apache باستخدام PHP، تم إنشاء تطبيق Java للاستفادة من جاكرتا مكتبة HttpClient الإصدار 4.0 beta2. ومع ذلك، فشل برنامج PHP في التعرف على الملف الذي تم تحميله، مما أدى إلى ظهور مصفوفة $_FILES فارغة.

تنفيذ Java

كود Java الأولي كان غير صحيح، كما هو واضح من النسخة المعدلة أدناه:

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

يكمن الاختلاف الرئيسي في استخدام MultipartEntity، الذي يتيح المعالجة الصحيحة لتحميلات الملفات.

PHP Script

يظل البرنامج النصي PHP دون تغيير:

الاستنتاج

من خلال استخدام MultipartEntity في كود Java، تم حل مشكلة فشل البرنامج النصي PHP في اكتشاف الملف الذي تم تحميله، ويمكن نقل الملف ومعالجته بنجاح على الخادم .

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3