如果需要实现跨服务器上传文件,就是将我们本地的文件上传到资源服务器上,比较好的办法就是通过ftp上传。这里是结合SpringMVC+ftp的形式上传的。我们需要先懂得如何配置springMVC,然后在配置ftp,最后再结合MultipartFile上传文件。
springMVC上传需要几个关键jar包,spring以及关联包可以自己配置,这里主要说明关键的jar包
1:spring-web-3.2.9.RELEASE.jar (spring的关键jar包,版本可以自己选择)
2:commons-io-2.2.jar (项目中用来处理IO的一些工具类包)
配置文件
SpringMVC是用MultipartFile来进行文件上传的,因此我们先要配置MultipartResolver,用于处理表单中的file
<!-- 上传文件解释器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<property name="maxUploadSize" value="10485760" />
<property name="maxInMemorySize" value="4096" />
<property name="resolveLazily" value="true" />
</bean>
其中属性详解:
defaultEncoding配置请求的编码格式,默认为iso-8859-1
maxUploadSize配置文件的最大单位,单位为字节
maxInMemorySize配置上传文件的缓存 ,单位为字节
resolveLazily属性启用是为了推迟文件解析,以便在UploadAction 中捕获文件大小异常
页面配置在页面的form中加上enctype="multipart/form-data"
<form id="" name="" method="post" action="" enctype="multipart/form-data">
表单标签中设置enctype="multipart/form-data"来确保匿名上载文件的正确编码。
是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作。enctype="multipart/form-data"是上传二进制数据。form里面的input的值以2进制的方式传过去,所以request就得不到值了。
编写上传控制类编写一个上传方法,这里没有返回结果,需要跳转页面或者返回其他值可以将void改为String、Map<String,Object>等值,再return返回结果。
/**
* 上传
* @param request
* @return
*/
@ResponseBody
@RequestMapping(value = "/upload", method = {RequestMethod.GET, RequestMethod.POST})
public void upload(HttpServletRequest request) {
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest)request;
MultipartFile file = multipartRequest.getFile("file");//file是页面input的name名
String basePath = "文件路径"
try {
MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
if (resolver.isMultipart(request)) {
String fileStoredPath = "文件夹路径";
//随机生成文件名
String randomName = StringUtil.getRandomFileName();
String uploadFileName = file.getOriginalFilename();
if (StringUtils.isNotBlank(uploadFileName)) {
//截取文件格式名
String suffix = uploadFileName.substring(uploadFileName.indexOf("."));
//重新拼装文件名
String newFileName = randomName + suffix;
String savePath = basePat