Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet通过Post上传文件_Java_Servlets - Fatal编程技术网

Java Servlet通过Post上传文件

Java Servlet通过Post上传文件,java,servlets,Java,Servlets,我正在开发一个应用程序,它使用HTTP请求将数据从一台服务器发送到另一台服务器。对于字符串来说,一切都很好,但我不知道如何发送文件(文件从一台服务器上传到另一台服务器) 我已经查看了一些示例,但是我还需要能够随文件一起发送字符串(文件ID) 请求是从该类的POST方法中的Java类发送的。是这样的:客户端向存储服务器发送具有ID的文件的上载请求。然后,该存储服务器将该文件上载到另一个存储服务器……因此,从第一个服务器到另一个服务器的POST请求是从该服务器的POST方法发送的 非常感谢任何方向正

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

我已经查看了一些示例,但是我还需要能够随文件一起发送字符串(文件ID)

请求是从该类的POST方法中的Java类发送的。是这样的:客户端向存储服务器发送具有ID的文件的上载请求。然后,该存储服务器将该文件上载到另一个存储服务器……因此,从第一个服务器到另一个服务器的POST请求是从该服务器的POST方法发送的


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

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

Commons
文件上传
软件包可以轻松地为servlet和web应用程序添加健壮、高性能的文件上传功能

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

看 链接可以帮助你更多

自从你说-

“我还需要能够将字符串(文件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
}

希望这能对您有所帮助。

以下是我设法实现的解决方案,它是有效的:

看看这是通过网页中的表单完成的。我没有表单或类似的东西。你需要客户端,服务器端,或者两者都可以?您可以使用HttpClient通过post传输文件request@Pazvanti很抱歉,我认为您的意思是如何处理上传服务器端-对于您可能想要查看的客户端-尝试查看-尤其是多部分实体(最后一个)它应该做一些类似于你正在寻找的东西。@NickJ-我已经在我的回答中提到过(链接到commons fileupload),实际上它在那里被描述;-)其余的我都试着自己解释,我真的希望这对他有帮助。嗨!对不起,我迟了答复。我将研究你描述的方法。乍一看,这似乎是我想要的。我会跟你说:)我看了代码和你指出的页面。但我找不到如何形成我发出的请求。您发送的代码可能非常好,但遗憾的是,我不知道如何从servletA(发送文件的服务器)生成请求。通过将文件从一个“存储服务器”的post方法上载到另一个“存储服务器”,很难预测您是如何发送请求的。你能发布你的代码以获得更好的回复吗?