springmvc 上传文件随记笔记实例给初学者

利用springMVC实现文件及图片上传功能,它主要是有MultipartResolver来实现的,我们通过配置这个MultipartResolver,可以实现我们的图片上传的方法。

1.配置之前准备,这里我们需要用到两个包

commons-fileupload和commons-io

2.我这里在myeclipse环境引入相应jar包

3.在xxx-servlet.xml里面输入我们的bean,multipartResolver

<bean id="multipartResolver"
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
        p:defaultEncoding="utf-8" 
        p:maxUploadSize="52428800"
        p:uploadTempDir="upload/temp" />

4.创建一个接收图片的方法uploadimg,参数是MultipartFile类型的,还有HttpServletRequest。具体实现可以看代码。

publicString uploadimg(MultipartFileavata,HttpServletRequestrequest){

Stringfileurl="";

{

if(avata.isEmpty()){

System.out.println("无法找到文件");

return"";

}else{

System.out.println("文件长度:"+avata.getSize());

System.out.println("文件类型:"+avata.getContentType());

System.out.println("文件名称:"+avata.getName());

System.out.println("文件原名:"+avata.getOriginalFilename());

System.out.println("========================================");

StringrealPath=request.getSession().getServletContext().getRealPath("/WEB-INF/yeehot");

FiletargetFile=newFile(realPath);

if(!targetFile.exists()){

targetFile.mkdirs();

}

System.out.println(realPath);

inti=avata.getOriginalFilename().lastIndexOf(".");//返回最后一个点的位置

Stringextension=avata.getOriginalFilename().substring(i+1);//取出扩展名

Stringfilename=UUID.randomUUID().toString()+"."+extension;

fileurl=filename;

try{

avata.transferTo(newFile(realPath,filename));

}catch(IllegalStateExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnfileurl;

}

}

}

5.创建一个controller.并且调用刚才上传图片的方法。最后打印图片的路径

@Controller

publicclassUploafAvataController{

@ResponseBody

@RequestMapping(value="/uploadavata")

publicStringupload(@RequestParam(value="file",required=false)MultipartFilefile,HttpServletRequestrequest,ModelMapmodel){

Stringpath=uploadimg(file,request);

returnrequest.getContextPath()+"/yeehot/"+path;

}

}

6.创建上传图片的jsp,注意一点就是enctype,这里一点要知名上传的类型是"multipart/form-data",

<body>

<formaction="uploadavata"method="post"enctype="multipart/form-data">

选择文件:<inputtype="file"name="file">

<inputtype="submit"value="提交">

</form>

</body>

7.测试上传结果,输入我们的项目路径:

http://192.168.3.114:8080/Yeehot-Program-King/upload.jsp

点击提交后可以看到如下路径说明图片上传成功

我们可以从tomcat服务器的

/apache-tomcat-7.0.69/webapps/Yeehot-Program-King/WEB-INF/yeehot目录下找到我们的图片

对于上传多图片的方法。

我们可以使用MultipartFile[]数组。我们把原来的代码改成如下

1、上传图片的方法,这里我输出为json数组。

publicStringuploadimgs(MultipartFile[]avatas,HttpServletRequestrequest){

Stringfileurl="";

JSONArrayimgArray=newJSONArray();

for(MultipartFileavata:avatas){

if(avata.isEmpty()){

System.out.println("无法找到文件");

}else{

System.out.println("文件长度:"+avata.getSize());

System.out.println("文件类型:"+avata.getContentType());

System.out.println("文件名称:"+avata.getName());

System.out.println("文件原名:"+avata.getOriginalFilename());

System.out.println("========================================");

StringrealPath=request.getSession().getServletContext().getRealPath("/WEB-INF/yeehot");

FiletargetFile=newFile(realPath);

if(!targetFile.exists()){

targetFile.mkdirs();

}

System.out.println(realPath);

inti=avata.getOriginalFilename().lastIndexOf(".");//返回最后一个点的位置

Stringextension=avata.getOriginalFilename().substring(i+1);//取出扩展名

Stringfilename=UUID.randomUUID().toString()+"."+extension;

fileurl=filename;

JSONObjectjsonObject=newJSONObject();

jsonObject.put("img",fileurl);

imgArray.add(jsonObject);

try{

avata.transferTo(newFile(realPath,filename));

}catch(IllegalStateExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

}

}

returnimgArray.toString();

}

2、在controller编写接受的方法

@ResponseBody

@RequestMapping(value="/uploadavatamulti")

publicStringuploadmul(@RequestParam(value="files",required=false)MultipartFile[]file,HttpServletRequestrequest,ModelMapmodel){

//Stringpath=uploadimg(file,request);

Stringpath=uploadimgs(file,request);

returnpath;

}

3、编写上传多文件的JSP。注意这里file的name="files"要和controller的一致。

<formaction="uploadavatamulti"method="post"enctype="multipart/form-data">

选择文件:<inputtype="file"name="files"><br>

选择文件:<inputtype="file"name="files"><br>

选择文件:<inputtype="file"name="files"><br>

<inputtype="submit"value="提交">

</form>

4、测试多文件上传

http://192.168.3.114:8080/Yeehot-Program-King/uploadmul.jsp

注意,可能会出现org.apache.commons.fileupload.FileUploadBase$SizeLimitExceededException:therequestwasrejectedbecauseitssize(249681)exceedstheconfiguredmaximum(204800)

这是由于我们刚刚限制文件上传的大小。这里超过了我们的文件最大值,这里是所有文件的大小。解决办法,我们可以增加文件上传的大小。我这里就用2048000.

<!--文件上传表单的视图解析器-->

<beanid="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!--oneofthepropertiesavailable;themaximumfilesizeinbytes-->

<propertyname="maxUploadSize"value="2048000"/>

</bean>

如果上传成功会返回如下的数据。

[

{

"img":"10edd053-52f0-4a14-a8e0-93cbcd8f60bd.png"

},

{

"img":"7547f880-e23f-40e6-b8bc-f4f9b30d6edf.png"

},

{

"img":"7c29cab1-b2e4-406e-871b-800b4f26698b.png"

}

]

 

转载于:https://my.oschina.net/u/1054538/blog/769827

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值