大家好,又见面了,我是你们的朋友全栈君。
Java 文件上传 MultipartFile
1. 配置MultipartResolver:用于处理表单中的file
<!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver -->
<beans:bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
p:defaultEncoding="UTF-8"
p:maxUploadSize="5400000"
p:uploadTempDir="fileUpload/temp"
>
</beans:bean>
defaultEncoding=”UTF-8″ 是请求的编码格式,默认为iso-8859-1
maxUploadSize=”5400000″ 是上传文件的大小,单位为字节
uploadTempDir=”fileUpload/temp” 为上传文件的临时路径
2.创建上传表单,
在form标签中加上enctype=”multipart/form-data”表示该表单是要处理文件的
<form id="upt_form" name="upt_form" action="" method="post" enctype="multipart/form-data" οnsubmit="return checkformDelSpace(this)">
<div class="row-form">
<div class="span2">附件</div>
<div class="span10">
<div class="ajaxuploadfile_component_1">
<div class="ajaxuploadfile_one">
<div class="span12">
<div class="input-append file">
<input type="file" name="file"/>
<input type="text" id="addFile" readonly="readonly"
class="funcCall[checkFile]"/>
<button class="btn" type="button">浏览</button>
</div>
</div>
</div>
</div>
</div>
</div>
</form>
3 js 控制验证上传文件格式 funcCall[checkFile]
//***********************************上传验证**********************************
function checkFile(field, rules, i, options) {
//上传文件验证
var urlStr = field.val();
if (null == urlStr || urlStr == "") {
return;
}
if (urlStr != "") {
var urlType = urlStr.substring(urlStr.lastIndexOf(".") + 1, urlStr.length);
urlType = urlType.toLowerCase();
if (urlType == "jpg" || urlType == "png" || urlType == "jpeg" || urlType == "gif" || urlType == "bmp") {
}
else {
return options.allrules.validatePhoto.alertText;
}
}
}
3.创建一个控制类:上传Controller
/**
* 修改需求Action
*
* @param request HttpServletRequest
* @param form form表单
* @param file 文件
* @return String
*/
@RequestMapping("uptRequestInfoAction.do")
@ResponseBody
public Map<String,Object> uptRequestInfoAction(HttpServletRequest request, RequestQueryForm form,
@RequestParam(value="file", required=false) MultipartFile file) {
Map<String,Object> map = new HashMap<String,Object>();
User user = (User) SessionUtil.getSessionAttribute(request, "loginUser", User.class);
try {
// 判断文件是否为空
if(!file.isEmpty()){
String uploadFileName = file.getOriginalFilename();
//上传文件
String pattern = "";
if (uploadFileName.contains(".")) {
pattern = uploadFileName.substring(uploadFileName.lastIndexOf("."));
}
String fileName = "*****" + "_" +
DateExtendUtil.formatDate2String(new Date(), "yyyyMMddHHmmssSSS") +
pattern;
String tmpFilePath = servletPath + "/" + fileName;
File tmpFile = new File(tmpFilePath);
// 写入临时文件
if (!tmpFile.getParentFile().exists()) {
tmpFile.getParentFile().mkdirs();
}
// 转存文件
file.transferTo(tmpFile);
InsertReqDTO insertReqDTO = new InsertReqDTO();
//文件名
insertReqDTO.setFileName(fileName);
//机构编码
insertReqDTO.setOrgCode("baofoo");
//文件组(参照枚举类FileGroup 不同文件组存放时效不同)
insertReqDTO.setFileGroup(FileGroup.AUTHENTICATION);
//文件日期
insertReqDTO.setFileDate(DateUtil.getCurrent(DateUtil.fullPatterns));
//备注信息
insertReqDTO.setRemark("需求信息附件");
//上传文件路径
insertReqDTO.setFilePath(tmpFilePath);
//文件名,机构编码,文件日期 不能重复
log.info("call 需求信息附件 Param {}:", ToStringBuilder.reflectionToString(insertReqDTO,
ToStringStyle.SHORT_PREFIX_STYLE));
CommandResDTO resDTO = DfsClient.upload(insertReqDTO);
log.info("call 需求信息附件 result {}", ToStringBuilder.reflectionToString(resDTO,
ToStringStyle.SHORT_PREFIX_STYLE));
// 附件地址
form.setFile_url(FormatUtil.toString(resDTO.getFileId()));
// 附件类型
form.setFile_type(pattern.toLowerCase());
}
int uptTag = requestQueryService.uptRequestInfo(form);
// 记录操作日志
int r = requestQueryService.addInsertEvent(form);
if(r < 1 || uptTag < 1){
map.put("retCode",0);
map.put("retMsg","修改需求信息失败!");
log.info("需求信息更新失败:【日志记录】call requestQueryService addInsertEvent:{}",r);
log.info("需求信息更新失败:call requestQueryService uptRequestInfo:{}",uptTag);
}else{
map.put("retCode",1);
map.put("retMsg","修改需求信息成功!");
}
} catch (Exception e) {
log.error("call uptRequestInfoAction 修改异常 ******", e);
map.put("retCode",0);
map.put("retMsg","修改需求信息失败!"+e);
}
return map;
}
下载保存附件:
/**
* 下载非图片的附件
* @param request HttpServletRequest
* @param response HttpServletResponse
*/
@RequestMapping("downloadFile.do")
public void downloadFile(HttpServletRequest request, HttpServletResponse response) {
InputStream in = null;
OutputStream out = null;
try {
Long file_id = Long.valueOf(request.getParameter("file_id"));
if (file_id == null || file_id == 0L) {
throw new ServiceException("requestQueryManager downloadFile 传入的dfs文件id错误");
}
QueryReqDTO reqDTO = new QueryReqDTO();
reqDTO.setFileId(file_id);
reqDTO.setOperation(Operation.QUERY);
log.info("downloadExcel QueryReqDTO:" + ToStringBuilder.reflectionToString(reqDTO));
Response res = SocketUtil.sendMessage(reqDTO);
if (!res.isSuccess()) {
throw new DfsException(ErrorCode.GET_FILE_INFO_ERROR, res.getErrorMsg());
}
CommandResDTO resDTO = (CommandResDTO) res.getResult();
String file_Name = resDTO.getFileName();
DfsClient.download(reqDTO, downloadUrl);
response.reset(); // 清空缓存区
String fileName = new String(file_Name.getBytes("Gb2312"), "ISO-8859-1"); // 文件名称的编码
response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件头
File file = new File(this.downloadUrl + "/" + file_Name);
in = new FileInputStream(file);
int len;
byte[] buffer = new byte[1024];
out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
if(e instanceof ServiceException){
log.error("call requestQueryManager downloadFile Exception:{}", e.getMessage());
}else {
log.error("call requestQueryManager downloadFile Exception:{}", e);
}
} finally {
IOUtils.closeQuietly(in);
IOUtils.closeQuietly(out);
}
}
(1)
通过MultipartFile的transferTo(File dest)这个方法来转存文件到指定的路径
(2)采用MultipartFile上传文件是可以为空,可以多个文件上传
(3)String getContentType()//获取文件MIME类型 InputStream getInputStream()//取文件流 String getName() //获取表单中文件组件的名字
String getOriginalFilename() //获取上传文件的原名 long getSize() //获取文件的字节大小,单位byte boolean isEmpty() //是否为空 void transferTo(File dest)
4. 多文件上传
(1) 上传表单
<body>
<h2>上传多个文件 实例</h2>
<form action="filesUpload.html" method="post"
enctype="multipart/form-data">
<p>
选择文件:<input type="file" name="files">
<p>
选择文件:<input type="file" name="files">
<p>
选择文件:<input type="file" name="files">
<p>
<input type="submit" value="提交">
</form>
</body>
(2)上传Controller
/****
*保存文件
* @param file
* @return
*/
private boolean saveFile(MultipartFile file) {
// 判断文件是否为空
if (!file.isEmpty()) {
try {
// 文件保存路径
String filePath = request.getSession().getServletContext().getRealPath("/") + "upload/"
+ file.getOriginalFilename();
// 转存文件
file.transferTo(new File(filePath));
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
return false;
}
编写action:
@RequestMapping("filesUpload")
public String filesUpload(@RequestParam("files") MultipartFile[] files) {
//判断file数组不能为空并且长度大于0
if(files!=null&&files.length>0){
//循环获取file数组中得文件
for(int i = 0;i<files.length;i++){
MultipartFile file = files[i];
//保存文件
saveFile(file);
}
}
// 重定向
return "redirect:/list.html";
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/146552.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...