SpringMVC 文件上传 MultipartFile、CommonsMultipartResolver
来源:互联网 发布:swift开发windows程序 编辑:程序博客网 时间:2024/05/20 15:39
首先做一个概括,上传文件/上传图片 到 ftp服务器的步骤是(以我做的一个简单的上传头像的例子讲解,也就是简单的上传文件):
1.上传、接收文件(有很多方式,我主要介绍一下我用到的方式是:SpringMVC 用的是 的MultipartFile来进行文件上传)
2.登录远程ftp服务器保存文件
3.上传文件到ftp
主要的就这三个步骤,下面看看具体实现方式;
一、上传、接收文件
1.要用SpringMVC 用的是 的MultipartFile来进行文件上传,首先要配置MultipartResolver:用于处理表单中的file:
<!-- 支持上传文件 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" />
<!--10*1024*1024即10M -->
<property name="maxUploadSize" value="10485760" />
<!--resolveLazily属性启用是为了推迟文件解析,以便在UploadAction 中捕获文件大小异常 -->
<property name="resolveLazily" value="false" />
</bean>
2.前台配置上上传:
主要要给他设置这个属性(enctype="multipart/form-data" )标识他是用MultipartFile上传的,name="licenceFile"能表示图片是哪个,后台能接收到,可以用这个属性来标识图片具体是那个。
<form id="register-form" enctype="multipart/form-data" action="../company/multi_upload" method="post">'
<li>'
<font class="required">*</font>'+
<span>代理记账许可证</span>'+
<input type="text" class="register-agencyText" id="register-agencyText" placeholder="只支持png, jpg, jpeg, gif格式文件"/>'+
<input type="hidden" name="file2" class="register-agencyFlieName" id="register-agencyFileName"/>'+
<input type="file" name="licenceFile" class="register-agencyFlie" id="register-agencyFile"/>'+
</li>'
<form>
3.后台接收:
①controller(也就是请求的那个action层,我用的是Springmvc):
注意: @RequestParam(value="headProtrait",required=false) MultipartFile[] files 接收的到的是一个MultipartFile数据,当然也可以用MultipartFil对象(在一个的情况下)
@Controller
@RequestMapping(IUrlDef.company_userPhoto)
public class CompanyUserPhotoController extends RockAbstractController {
private static final String URL_NAME = "company_userPhoto";
@Autowired
private CompanyUserPhotoService service;
@RequestMapping(method = RequestMethod.POST)
@ResponseBody
public Object doPost(@RequestParam(value="headProtrait",required=false) MultipartFile[] files ,HttpServletRequest request,HttpServletResponse response, Model model
) throws InvocationTargetException {
params.put("file", files);//这里存好接收到的图片数据
return response(this.service, "doPost", params, model);
}
}
}
②.service层的处理方式:
service层接收,处理就好了:MultipartFile[] files = (MultipartFile[]) urlParams.get("file");
上传到ftp: FileMessage fileMessage = sftpFileOper.upSftpFileCommon(imgName, input, tarPath);
接受图片,做接受处理,并上传sftp:
public JSONObject setUserHead(Map<String, Object> urlParams,Map<String, String> reqParams,
TuUser tuUser,TuAccountAvatarMapper avatarMpper,Boolean flag){
JSONObject jsonObj = new JSONObject();
jsonObj.put("code", 1);
jsonObj.put("msg", "设置头像失败");
MultipartFile[] files = (MultipartFile[]) urlParams.get("file");
String imgName = "";// 图片名称
String tarPath = "";// 图片最终保存的路径
MultipartFile file = null;
int FileLength = files.length;
if (files != null && FileLength > 0) {
// 循环获取file数组中得文件
for (int i = 0; i < FileLength; i++) {
file = files[i];
imgName = file.getOriginalFilename();// 上传的文件名称
InputStream input;
try {
input = file.getInputStream();
tarPath = ReadPropertyUtil.getUrlByKey("userPhotoPath") + tuUser.getId();// 文件上传到的路径位置
jsonObj = saveOrUpdateUserPhto(input, imgName, tarPath, tuUser.getUsername(), avatarMpper,
reqParams, flag);
} catch (Exception e) {
LOG.e(e.toString());
}
}
}
return jsonObj;
}
上传sftp并保存记录:
public JSONObject saveOrUpdateUserPhto(InputStream input,String imgName,String tarPath,String userName,TuAccountAvatarMapper avatarMpper,Map<String, String> reqParams,Boolean flag) {
JSONObject jsonObj = new JSONObject();
jsonObj.put("code", 1);// 默认失败
int successflag = 0;
try {
SftpFileOper sftpFileOper = new SftpFileOper();
FileMessage fileMessage = sftpFileOper.upSftpFileCommon(imgName, input, tarPath);// 完成数据提交上传到ftp服务器
String fileName = fileMessage.getFileName();
if (fileMessage.getStatus() == 200) {
if (flag) {
// 新增
successflag = addUserHeadData(avatarMpper, tarPath, fileName, userName, reqParams);
} else {
// 修改
successflag = updateUserHeadData(avatarMpper, tarPath, fileName, userName, reqParams);
}
if (successflag > 0) {
jsonObj.put("code", 0);
jsonObj.put("msg", "设置头像成功");
}
}
} catch (Exception e) {
LOG.e(e.toString());
}
return jsonObj;
}
上传到ftp的方法:
public FileMessage upSftpFileCommon(String fileName, InputStream inputstream, String directory)
throws Exception
{
SftpClientUtil sftpClientUtil = sftpConnection();
FileMessage fileMessage = sftpClientUtil.upload(directory, inputstream, fileName);
inputstream.close();
sftpClientUtil.disconnect();
return fileMessage;
}
- SpringMVC 文件上传 MultipartFile、CommonsMultipartResolver
- SpringMVC上传文件MultipartFile
- springmvc 上传文件 MultipartFile
- SpringMVC MultipartFile文件上传
- springMVC文件上传 MultipartFile
- springmvc中multipartFile文件上传
- SpringMVC 文件上传配置MultipartFile
- SpringMVC 文件上传,使用MultipartFile
- SpringMVC使用Multipartfile上传文件
- SpringMVC 菜鸟教程 3 文件上传 CommonsMultipartResolver
- SpringMVC中使用CommonsMultipartResolver进行文件上传
- SpringMVC中使用CommonsMultipartResolver上传文件实例
- SpringMVC使用CommonsMultipartResolver实现文件上传
- SpringMVC 文件上传,使用的MultipartFile
- SpringMVC MultipartFile来进行多文件上传
- springMVC MultipartFile html5 多文件上传
- Springmvc 上传文件MultipartFile 转File 笔记
- SpringMVC利用MultipartFile进行文件上传
- Angular.js 学习笔记
- 【三层】——七层的前世
- ACM刷题之HDU————饭卡
- leetcode No215. Kth Largest Element in an Array
- 同步、异步转化和任务执行
- SpringMVC 文件上传 MultipartFile、CommonsMultipartResolver
- WebGL 写入纹理
- Linux学习之———压缩命令
- 2017/2/22 基于SpringMVC和Mybatis的分页实现(2)
- Cookie中字符串分隔问题
- 字符串对比
- 如何用docker安装laravel开发环境
- 解决hyper-v 虚拟机 网速很慢问题
- /etc/sysctl.conf