利用Spring 实现文件上传

      在Spring mvc 中已经封装了common-fileupload,所以在Spring MVC 中实现文件上传是一件相对简单的事情。

  1.  在Spring 的配置文件中配置一个multiparResover Bean 
  2.  在上传文件的表单中将属性enctype 设置问”multipart/form-data”
  3. 实现controller

      

<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="100000000" />
		<property name="defaultEncoding" value="utf-8" />

	</bean>

 

写道
<form name="uploadForm" id="uploadForm" action="$tuitionModule.setTarget('upload.htm')" method="POST" enctype="multipart/form-data">

<div class="tb-table">
<table>
<tr>
<td width="20%"></td>
<td width="30%"><span class="btn"><input type="file" name="uploadFile" id="uploadFile" /></span></td>
<td><span class="btn"><input type="submit" value="导入数据" id="btn-primary"></span></td>
</tr>

</table>
</div>
</form>

 

写道
public class FileUploadController {

private static final Logger logger = LoggerFactory
.getLogger(FileUploadController.class);
@Autowired
private MultipartFileValidator multipartFileValidator;

@Autowired
private TuitionPropertyParser tuitionPropertyParser;

@OsgiReference
private TuitionOrderServiceClient tuitionOrderServiceClient;

/**文件上传的默认根目录**/
private static final String default_parent_dir = "/home/admin/sharedata/upload/ipay/tuition/paybang/";

@RequestMapping(value = "/upload.htm", method = RequestMethod.GET)
public String showUploadPageI(Model model) {
return TuitionConstants.UPLOAD_PAGE;
}

@RequestMapping(value = "/upload.htm", method = RequestMethod.POST)
public String upload(@RequestParam("uploadFile") MultipartFile uploadFile,
HttpServletRequest request, Model model) {
// 如果文件不为空
if (multipartFileValidator.validate(uploadFile)) {
try {
String fileName = uploadFile.getOriginalFilename();
String dest = default_parent_dir
+ DateUtil.format(new Date(), DateUtil.shortFormat) + "/" + fileName;
// 判断文件是否存在,不允许上传重复文件
if (new File(dest).exists()) {
throw new AlipayRuntimeException("重复文件上传");
}
//将解析文件的结果返回
List<TuitionOrderModel> orders = tuitionPropertyParser.parser(uploadFile
.getInputStream(), dest, OperationContextHolder.getPrincipal().getUserId());
// 保存数据失败
if (!tuitionOrderServiceClient.saveOrders(orders)) {
model.addAttribute(TuitionConstants.KEY_ERROR_MSG, "数据落地异常");
logger.error("未能够成功保存数据");
return TuitionConstants.UPLOAD_PAGE;
}
model.addAttribute(TuitionConstants.KEY_ITEMS, orders);
model.addAttribute("fileName", dest);
// 复制文件
copyFile(uploadFile, dest);
} catch (Exception e) {
model
.addAttribute(TuitionConstants.KEY_ERROR_MSG,
"上传文件异常,文件名称是:" + uploadFile.getOriginalFilename() + "(" + e.getMessage()
+ ")");
logger.error("上传文件异常", e);
return TuitionConstants.UPLOAD_PAGE;
}
} else {
// 上传文件为空
model.addAttribute("errorMsg", "上传文件异常,文件为空或者文件格式不正确,目前支持的文件格式为:"
+ multipartFileValidator.getAllowedTypes());
}
return TuitionConstants.UPLOAD_PAGE;
}

/**
* 将上传的文件上传到指定的目录下
*
* @param uploadFile 上传的文件
* @param dest 目的地
* @throws IOException
*/
private void copyFile(MultipartFile uploadFile, String dest) throws IOException {
byte[] bytes = uploadFile.getBytes();
File filePath = new File(dest);
if (!filePath.getParentFile().exists()) {
filePath.getParentFile().mkdirs();
}
FileCopyUtils.copy(bytes, filePath);
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈脩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值