1. 在工程依赖库下添加文件上传jar包

  commons-fileupload-1.2.2.jar
  commons-io-2.4.jar

2.在springMVC配置文件中配置视图解析multipartResolver

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

  这里有个问题需要注意一下,Bean 的id必须为multipartResolver,因为在项目初始化的时候,Spring容器会通过这个id来进行注入,下面是Spring源码:


 public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";
/** MultipartResolver used by this servlet */
private MultipartResolver multipartResolver;
/*
省略一大堆代码
*/
/**
* Initialize the MultipartResolver used by this class.
* <p>If no bean is defined with the given name in the BeanFactory for this namespace,
* no multipart handling is provided.
*/
private void initMultipartResolver(ApplicationContext context) {
try {
this.multipartResolver = context.getBean(MULTIPART_RESOLVER_BEAN_NAME, MultipartResolver.class);
if (logger.isDebugEnabled()) {
logger.debug("Using MultipartResolver [" + this.multipartResolver + "]");
}
}
catch (NoSuchBeanDefinitionException ex) {
// Default is no multipart resolver.
this.multipartResolver = null;
if (logger.isDebugEnabled()) {
logger.debug("Unable to locate MultipartResolver with name '" + MULTIPART_RESOLVER_BEAN_NAME +
"': no multipart request handling provided");
}
}
}

  接下来,我们测试一下如果写错之后会报什么错误

  

  上面只是DEBUG, 查看源码就会知道会DEBUG输出这一句,

  下面是具体报的错误:预期的MultipartHttpServletRequest:是否配置了MultipartResolver?

下面依次是jsp代码和后台实现上传的java代码:

  

<form id="userForm" name="userForm" method="post"
action="${pageContext.request.contextPath }/user/useraddsave.html"
enctype="multipart/form-data">
<div>
<label for="a_idPicPath">证件照:</label> <input type="file"
name="a_idPicPath" id="a_idPicPath" /> <font color="red"></font>
</div>
<div class="providerAddBtn">
<input type="button" name="add" id="add" value="保存"> <input
type="button" id="back" name="back" value="返回">
</div>
</form>
//保存新增用户信息
@RequestMapping(value="/useraddsave.html",method=RequestMethod.POST)
public String addUserSave(User user,HttpServletRequest request,@RequestParam(value="a_idPicPath",required=false) MultipartFile multipartFile){ if(!multipartFile.isEmpty()){
String path = "/statics"+File.separator+"upload"; //文件或者图片上传到的位置
String oldName = multipartFile.getOriginalFilename(); //上传的文件名
String prefix = FilenameUtils.getExtension(oldName); //文件的后缀名
int maxSize =5000000;
if(multipartFile.getSize()<maxSize){
if(prefix.equalsIgnoreCase("jpg")|| prefix.equalsIgnoreCase("png")){
String fileName = System.currentTimeMillis()+RandomUtils.nextInt(1000000)+"_Personal."+prefix; // 为避免文件名一样随机生成的文件名保存在服务器
File targetFile = new File(path,fileName);
if(!targetFile.exists()){
targetFile.mkdirs();
}
try {
multipartFile.transferTo(targetFile); //开始上传
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
request.setAttribute("uploadFileError", "上傳出現異常,上傳失敗");
}
String idPicPath= path+File.separator+fileName;
user.setIdPicPath(idPicPath);
user.setCreationDate(new Date());
userService.add(user);
return "redirect:/user/userlist.html";
} else {
request.setAttribute("uploadFileError", "文件格式錯誤,上傳失敗");
}
} else {
request.setAttribute("uploadFileError", "文件太大,上傳失敗");
}
}
return "useradd";//新增失败返回到useradd.jsp
}

  方法需要添加参数 @RequestParam(value="a_idPicPath",required=false) MultipartFile multipartFile

              The end......

Spring上传文件,图片,以及常见的问题的更多相关文章

  1. spring上传文件

    在使用spring上传文件的时候,使用的文件接收参数类型为 org.springframework.web.multipart.MultipartFile 如果该参数没有指定@RequestParam ...

  2. ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合

    一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...

  3. PHP socket上传文件图片

    最近了解了下下socket方面的东西,想做一个socket上传文件的例子. 在网上搜了搜代码执行后,图片数据传输了一半,图片的下半部分是灰色的.然后就自己仿着搜来的代码和php.net 中socket ...

  4. 基于spring-boot的web应用,ckeditor上传文件图片文件

    说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...

  5. spring 上传文件文件的一个例子,

    /** * 类名称:UploadTest 类描述:创建人:zhang 创建时间:2015年3月13日 下午4:20:57 修改人:zhang * 修改时间:2015年3月13日 下午4:20:57 修 ...

  6. Spring 上传文件

    最近碰到一个上传文件的需求,其实之前也做过但是都是search->copy 没有细究过,这次纯手工. 先看一下需要依赖的包: <dependency> <groupId> ...

  7. 通过PHP CURL模拟请求上传文件|图片。

    现在有一个需求就是在自己的服务器上传图片到其他服务器上面,过程:客户端上传图片->存放到本地服务器->再转发到第三方服务器; 由于前端Ajax受限制,只能通过服务器做转发了. 在PHP中通 ...

  8. elementUI 上传文件图片大小加了限制后 仍然上传了

    https://blog.csdn.net/chanlingmai5374/article/details/80558444  看了这位老哥的说法 在看看文档 才发现自己没认真看文档 <el-u ...

  9. 【2】通过Ajax方式上传文件(图片),使用FormData进行Ajax请求

    HTML: <form id= "uploadForm"> <p >指定文件名: <input type="text" name= ...

随机推荐

  1. HDU-1495 非常可乐 (嵌套结构体-广搜 对比 一般广搜)

    题意 大家一定觉的运动以后喝可乐是一件很惬意的事情,但是seeyou却不这么认为.因为每次当seeyou买了可乐以后,阿牛就要求和seeyou一起分享这一瓶可乐,而且一定要喝的和seeyou一样多.但 ...

  2. [补档]vijos1883 月光的魔法

    vijos1883 月光的魔法 题目 传送门:https://www.vijos.org/p/1883 背景 影几欺哄了众生了 天以外-- 月儿何曾圆缺   描述 有些东西就如同月光的魔法一般. Lu ...

  3. nodejs-基础

    01-nodejs介绍 1.什么是nodejs 1.(javascript跑在机器端,服务端)Javascript on the machine 2.(跑在谷歌v8引擎上)A runtime for ...

  4. 生成二维码的js以及调用打印插件

    插件: qrcode.js 插件下载网址:http://code.ciaoca.com/javascript/qrcode/ 用法实例: <script type="text/java ...

  5. MySQL、Oracle数据库之操作系统版本选择

    玩了快五年的Oracle,期间接触的操作系统大都是linux和aix,其中linux大部分为5.8的红帽子以及centos,oracle可以在上边运行稳定且需要安装其他与oracle相关的rpm包都是 ...

  6. HTML的学习笔记

    一.HTML的概述(了解) a.html是什么 : hypertext markup language 超文本标记语言           超文本:音频,视频,图片称为超文本..           ...

  7. LinkQueue(链队列)

    关于Node.h,请参考LinkStack #include"Node.h" template<typename ElemType> class LinkQueue { ...

  8. [ZYNQ-7]PS处理PL外部中断的简单实例的剖析 (参考米联miz702n)

    Zynq的ARM通过GIC中断控制器来接收核仲裁所有的中断.由于中断向量表只有4Bytes大小,仅仅正好存放一条跳转语句,因此当产生一个外部中断时,中断处理的大致过程:PC内容保存到LR_IRQ用于中 ...

  9. [算法题] Remove Duplicates from Sorted Array ii

    题目内容 本题来源LeetCode Follow up for "Remove Duplicates": What if duplicates are allowed at mos ...

  10. HDU 1513 Palindrome:LCS(最长公共子序列)or 记忆化搜索

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1513 题意: 给你一个字符串s,你可以在s中的任意位置添加任意字符,问你将s变成一个回文串最少需要添加 ...