博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springmvc 上传文件随记笔记实例给初学者
阅读量:6885 次
发布时间:2019-06-27

本文共 4941 字,大约阅读时间需要 16 分钟。

hot3.png

利用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.并且调用刚才上传图片的方法。最后打印图片的路径

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

你可能感兴趣的文章
创建windows服务
查看>>
HTML5 入门基础
查看>>
【转载】读懂IL代码就这么简单(二)
查看>>
C++文件操作(fstream)
查看>>
用main函数传参做简单的计算器的代码
查看>>
python中struct.unpack的用法
查看>>
体绘制(Volume Rendering)概述之4:光线投射算法(Ray Casting)实现流程和代码(基于CPU的实现)...
查看>>
Python实践之(七)逻辑回归(Logistic Regression)
查看>>
PAT (Advanced Level) 1107. Social Clusters (30)
查看>>
【开源社群系统研发日记五】ThinkSNS+ 是如何计算字符显示长度的
查看>>
Nodejs日志管理log4js
查看>>
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
剑指offer---12-**--数值的整数次方
查看>>
PAT - L2-010. 排座位(并查集)
查看>>
Python 学习笔记 - 线程(线程锁,信标,事件和条件)
查看>>
大数据技术服务商个推获4亿人民币D轮融资
查看>>
Git的详细使用教程
查看>>
[LeetCode]40.Combination Sum II
查看>>