hoo*_*knc 5 java rest file-upload put spring-mvc
有没有人知道任何产品或库,如Apache Commons FileUpload将处理PUT文件上传?
任何友好的建议或方向将非常感谢!
全文:
我们开始为我们的java webapp实现文件上传休息(如)服务,但似乎没有任何"简单"的解决方案来处理通过HTTP PUT方法上传文件.
我们希望找到像Apache Commons FileUpload项目这样的库,但不仅要处理"基于表单的HTML文件上传"和/或"multipart/form-data".
我们非常希望FileUpload能够临时存储文件,在询问时移动这些文件,然后在不再使用临时文件后清理它们.我们还喜欢这样一个事实:Spring会自动将MultipartFile List绑定到我们的命令对象,并且当它进入我们的其他基于html表单的文件上传控制器时它们可供我们使用.
全栈背景:
感谢您的时间!
以下url是一个示例,显示了从请求的InputStream上传文件的功能.代码完成了工作但是生产质量不高.
https://boplicity.nl/confluence/display/spring/Using+HTTP+PUT+and+Spring+MVC+to+upload+files
我们使用以下curl命令来测试我们的web服务:
curl -v -k -X PUT --data-binary @"c:/java/files/tempfilename.txt" https://localhost:8443/api/file/tempfilename.txt
Run Code Online (Sandbox Code Playgroud)
然后xwoker给出了以下很好的卷曲示例:
curl -v -X PUT -T "myfile" http://localhost:8080/mytargetfilename
Run Code Online (Sandbox Code Playgroud)
让弹簧正确响应HTTP PUT方法的文件上载请求非常容易.
只需重写自定义MultipartResolver类中的isMultipart()方法即可.
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.servlet.ServletRequestContext;
import javax.servlet.http.HttpServletRequest;
public class PostAndPutCommonsMultipartResolver extends CommonsMultipartResolver {
private static final String POST_METHOD = "POST";
private static final String PUT_METHOD = "PUT";
@Override
public boolean isMultipart(HttpServletRequest request) {
boolean isMultipartRequest = false;
if (request != null) {
if (POST_METHOD.equalsIgnoreCase(request.getMethod()) || PUT_METHOD.equalsIgnoreCase(request.getMethod())) {
isMultipartRequest = FileUploadBase.isMultipartContent(new ServletRequestContext(request));
}
}
return isMultipartRequest;
}
}
Run Code Online (Sandbox Code Playgroud)
真正重要的是扩展默认的MultipartResolver,以便isMultipart()方法对POST或PUT请求返回true.
通常,有两个默认的MultipartResolver实现: CommonsMultipartResolver(与Apache Commons FileUpload一起使用)和StandardServletMultipartResolver(与Servlet 3.0+ Part API一起使用).
由于我们使用的是Apache Commons FileUpload,因此扩展了CommonsMultipartResolver类.
MultipartResolver的Javadoc页面上有文档说明如何为您的应用程序正确定义自定义MultipartResolver(重点是我的):
没有用于Spring DispatcherServlet的默认解析器实现,因为应用程序可能会选择解析其多部分请求本身.要定义实现,请在DispatcherServlet的应用程序上下文中创建一个id为"multipartResolver"的bean.这样的解析器将应用于该DispatcherServlet处理的所有请求.
对于xml配置的应用程序,它将看起来接近以下内容:
<bean id="multipartResolver" class="<package>.<name>.PostAndPutCommonsMultipartResolver"/>
Run Code Online (Sandbox Code Playgroud)
对于注释配置的应用程序,它将看起来接近以下内容:
@Bean(name = "multipartResolver")
public CommonsMultipartResolver createMultipartResolver() {
return new PostAndPutCommonsMultipartResolver();
}
Run Code Online (Sandbox Code Playgroud)
有关MultipartResolver的注释配置的更多信息.
| 归档时间: |
|
| 查看次数: |
14444 次 |
| 最近记录: |