【问题标题】:Upload a file from java client to a apache http server将文件从 java 客户端上传到 apache http 服务器
【发布时间】:2014-03-11 06:01:42
【问题描述】:

我正在尝试使用 apache HttpClient api 将“myfile.txt”文件作为“uploaded.txt”上传到 apache 服务器 (WAMP),但我得到“404 not found”状态。

公共类 Httpupload1 { 公共静态 void main(String[] args) 抛出异常 { String url = "http://username:password@localhost/uploaded.txt"; DefaultHttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = 新的 HttpPost(url); MultipartEntity 实体 = 新的 MultipartEntity(); 内容主体 = 新文件主体( 新文件(“C:/用户/用户名/桌面/myfile.txt”), ContentType.APPLICATION_OCTET_STREAM ); entity.addPart("文件", 正文); httppost.setEntity(实体); HttpResponse 响应 = httpclient.execute(httppost); System.out.println(response.getStatusLine()); } }

【问题讨论】:

  • 我发现您显示的 URL 不太可能与接受和处理文件上传的任何内容相关。
  • @BrianRoach 你能告诉我如何发送请求吗?即使没有用户名:密码,它也不起作用。
  • 正如@BrianRoach 所说,我认为服务器端(PHP 代码,...)接受上传。您在这里只有客户端。 WAMP 没有开箱即用。

标签: java apache http


【解决方案1】:

无论是 DefaultHttpClient 还是 AndroidHttpClient 摘要 URL,例如 user:password@... 相反,您需要使用 B64 编码才能将您的凭据传输到 apache 服务器。

这样做试试这个

     public String getB64Auth (String login, String pass) {
       String source=login+":"+pass;
       String auth="Basic "+android.util.Base64.encodeToString(source.getBytes(),android.util.Base64.URL_SAFE|Base64.NO_WRAP);
       return auth;
     }

然后必须将生成的字符串添加到您的 HttpPost 对象中

String auth = getB64Auth("username","password");
HttpPost postRequest = new HttpPost(URL);
postRequest.addHeader("Authorization",auth);

您还需要在服务器端接受数据的东西(如 php 脚本)。我怀疑“uploaded.txt”是否这样做...... 该脚本还负责处理、命名和保存接收到的文件。例如,您可以使用添加到 MultiPartEntity 的 StringBody 来传递用于在服务器端保存文件的名称。

更多信息请参见http://www.w3schools.com/PHP/php_file_upload.asp

【讨论】:

  • 我没有 php 脚本。我只需要将一些文件从客户端复制到服务器。
猜你喜欢
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多