为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用PHP的JavaHttpClient库上载文件

如何使用PHP的JavaHttpClient库上载文件

小唯快跑啊 2019-07-02 10:23:45
如何使用PHP的JavaHttpClient库上载文件我想编写Java应用程序,用PHP将文件上传到Apache服务器。Java代码使用JakartaHttpClient库版本4.0 Beta 2: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.FileEntity; 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:9002/upload.php");     File file = new File("c:/TRASH/zaba_1.jpg");     FileEntity reqEntity = new FileEntity(file, "binary/octet-stream");     httppost.setEntity(reqEntity);     reqEntity.setContentType("binary/octet-stream");     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();   }}PHP文件upload.php非常简单:<?phpif (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);}?>以请求是成功的,我能够与服务器通信,但是PHP没有注意到文件-这个方法is_uploaded_file退回来false和$_FILES变量是空的。我不知道为什么会发生这种事。我跟踪了HTTP响应和请求,它们看起来很好
查看完整描述

3 回答

?
阿晨1998

TA贡献2037条经验 获得超6个赞

好的,我使用的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。


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 531 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信