首页 >Java >java教程 >为什么我的 Java HttpClient 文件上传到 PHP 服务器失败,即使连接成功?

为什么我的 Java HttpClient 文件上传到 PHP 服务器失败,即使连接成功?

DDD
DDD原创
2024-12-07 09:43:12696浏览

Why is my Java HttpClient file upload to a PHP server failing, even though the connection is successful?

使用 Java HttpClient 和 PHP 上传文件

问题:

您的目标是创建一个Java 应用程序,可以使用 Jakarta HttpClient 库将文件上传到运行 PHP 的 Apache 服务器。 PHP服务器利用一个简单的脚本来接收和存储上传的文件。然而,在执行时,您会遇到一个不寻常的问题,即文件上传失败,如 PHP 脚本所报告的那样。代码执行响应表明连接成功,但 PHP 仍未注意到该文件。

解决方案:

您提供的初始 Java 代码包含错误。使用Java HttpClient库的正确实现如下所示:

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。在前面的代码中,使用了 FileEntity。然而,MultipartEntity 更适合文件上传,因为它允许包含额外的参数和内容类型的规范。

使用 MultipartEntity 后,文件上传成功,PHP 文件无需任何操作即可接收上传。任何问题。 is_uploaded_file() 函数返回 true,$_FILES 数组已正确填充有关上传文件的数据。

以上是为什么我的 Java HttpClient 文件上传到 PHP 服务器失败,即使连接成功?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn