为什么这个上传代码在java中不起作用?

时间:2015-09-19 07:41:00

标签: java

我想上传带有发送http请求的文件到php。 我一遍又一遍地测试服务器上的php端,但是当我用这段代码发送请求时

 private static void upload() {
    File targetFile = new File("test.txt");
    PostMethod filePost = new PostMethod("http://localhost/chat_upload/service/index.php/upload/do_upload");
    try {
        Part[] parts = {
                new FilePart(targetFile.getName(), targetFile),
                new StringPart("name", "userfile")
        };
        filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
        org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
       // client.getHttpConnectionManager().getParams().setConnectionTimeout(50000);
        int status = client.executeMethod(filePost);
        if (status == HttpStatus.SC_OK) {
            System.out.println("Upload complete, response=" + filePost.getResponseBodyAsString());
        } else {
            System.out.println("Upload failed, response=" + HttpStatus.getStatusText(status));

        }
    } catch (Exception ex) {
        System.out.println(ex.fillInStackTrace());
    } finally {
        filePost.releaseConnection();
    }
}

此方法在控制台上发送文件并打印。当我跑,服务器说: 文件未被选中。

{我写php方面,当文件没有被选中时,这个错误打印}

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

do_upload处理程序可能正在查找名为file的文件,但您没有按名称添加部件。

您需要3 parameter constructor来设置名称和文件名:

new FilePart("file", targetFile.getName(), targetFile)

或者是另一部分尝试设置部件名称?如果是,那么:

Part[] parts = {
    new FilePart("userfile", targetFile.getName(), targetFile)
};