Servlet通过Post上传FIle

时间:2013-03-20 19:05:26

标签: java servlets

我正在开发一个使用HTTP请求将数据从一个服务器发送到另一个服务器的应用程序。一切都适用于字符串,但我不知道如何发送文件(从一台服务器上传文件到另一台服务器)。

我查看了一些示例,但我还需要能够发送字符串(文件ID)和文件。

请求是从该类的POST方法中的Java类发送的。是这样的:客户端将带有ID的文件的上传请求发送到存储服务器。该存储服务器然后将该文件上载到另一个存储服务器...所以从第一个服务器到另一个服务器的POST请求是从该服务器的POST方法方法发送的。

非常感谢任何正确方向的示例代码或链接。

3 个答案:

答案 0 :(得分:0)

找到了tutorial如何使用HttpClient发送多部分数据。看看

答案 1 :(得分:0)

Commons FileUpload包可以轻松地为您的servlet和Web应用程序添加强大,高性能的文件上载功能。

FileUpload解析符合RFC 1867“HTML格式的基于表单的文件上载”的HTTP请求。也就是说,如果使用POST方法提交HTTP请求,并且内容类型为“multipart / form-data”,则FileUpload可以解析该请求,并以调用者容易使用的方式提供结果,如上所述here

参见this 链接可以帮助你更多。

既然你说 -

  

“我还需要能够发送字符串(文件ID)   文件“

您必须解析Http请求并检查FileItem是否为表单字段(字符串/文本 - 您的案例中的文件ID)  并相应地处理它。

以下是多部分内容请求的示例代码 -

boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        FileItemFactory factory = new DiskFileItemFactory();
        FileItem item=null;
        ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
        servletFileUpload.setSizeMax(-1);

        List items =null;
        if (isMultipart) {  
            try 
            {
                items = servletFileUpload.parseRequest(request);
                Iterator iter = items.iterator();
                while (iter.hasNext()) {
                    item = (FileItem) iter.next();                  
                    if (item.isFormField()) 
                    {
//get your file Id from element to match with item.getFieldName() and do whatever you want
}
else if ( !item.isFormField() ){
//save your file here
}

希望对你有所帮助。

答案 2 :(得分:0)