您的位置:首页 > 编程语言 > Java开发

SpringMVC创建web项目基础之(三)——Spring MVC实现文件上传

2017-02-03 12:25 525 查看
有时候,最美的惊喜并不是得到,而是学会付出。——《 安娜和她的云 》

最近放慢了写作的速度,是因为我慢慢觉得有些东西还是沉淀一段时间后才会更有价值。

我们先来看看使用Spring MVC实现文件上传所需要的jar包

?
这里只列出了上传下载所需要的jar包,使用Spring MVC框架的jar包我在上一篇文章已经写过了,如果还没看的请点击链接springmvc创建web项目基础之二-spring-mvc与mybatis整合详解先去看我的上一篇文章。

一、前端页面实现

前端页面很简单,样子如下:





<div class="col-lg-12" style="margin-top: 10px">
<form id="upLoad_form" method="post" enctype="multipart/form-data">
<input type="file" id="picture" name="file">
<button  type="button" id="upload_btn" class="btn btn-primary" >上传图片</button>
</form>
</div>


?

二、后端实现

1.控制器BookShopController

在这个项目里简单实现一个上传图片的功能。

?
 
@Resource
private BookShopService mService;
/**
* 上传图片
*
* @param MultipartFile file 页面选中的文件
* @param HttpServletRequest request 请求
* @param HttpServletResponse response 响应
*
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public void upload(@RequestParam("file") MultipartFile file,HttpServletRequest request, HttpServletResponse response) {

try {

mService.uploadFile(file,request,response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
2.服务接口BookShopService

public interface BookShopService {
public void uploadFile(MultipartFile file,HttpServletRequest request, HttpServletResponse response) throws Exception;
}


?

3.服务接口的实现类BookShopServiceImpl

@Service
public class BookShopServiceImpl implements BookShopService {
@Override
public void uploadFile(MultipartFile file,HttpServletRequest request, HttpServletResponse response) throws Exception {
BookShopUploadUtil.fileUp(file,request,response);
}
}


?

4.上传文件工具类BookShopUploadUtil

这个是实现上传文件的核心实现

public class BookShopUploadUtil {
/**
* 上传图片
*/
public static void fileUp(MultipartFile file,HttpServletRequest request,
HttpServletResponse response) throws Exception {
String path="";//保存图片路径
String filePath = Consts.CONTEXTPATH;//显示图片路径(相对路径)
try {
if (!file.isEmpty()){

//得到服务器中保存文件的绝对路径
path = request.getServletContext().getRealPath(Consts.SAVE_PATH + "/");
//新建文件夹
newFolder(path);
//新建文件夹完成后将路径添加文件名
path += file.getOriginalFilename();
//页面显示图片的相对路径
filePath += "/" + Consts.SAVE_PATH +  "/" + file.getOriginalFilename();
//使用StreamsAPI方式拷贝文件
Streams.copy(file.getInputStream(),new FileOutputStream(path),true);
//将上面得到的图片相对路径返回给页面
JSONObject json = new JSONObject();
json.accumulate(Consts.SRC, filePath);
json.accumulate("error", false);
json.accumulate("message", "上传成功!");
PrintWriter out = response.getWriter();
out.print(json.toString());
out.flush();
out.close();
}
} catch (Exception e) {
System.out.println("文件上传失败");
e.printStackTrace();
path="";
}
}
/**
* 创建文件夹
*
* @param folderPath
*/
public static void newFolder(String folderPath) {
try {
File myFilePath = new File(folderPath);
if (!myFilePath.exists()) {
//创建多级文件夹
myFilePath.mkdirs();
System.out.println("创建文件夹路径:" + folderPath);
}
} catch (Exception e) {
System.out.println("新建文件夹操作出错");
e.printStackTrace();
}
}

}


?

Consts.SAVE_PATH是一个字符串常量,表示存放路径

public class Consts {
public final static String SRC = "src";
public final static String SAVE_PATH = "resources/bookshopupload/savefile/";
}


?

至此实现就完成了,效果如下





如果你喜欢我的文章请扫描主页的微信公众号二维码,每天都有新推文。


如果你喜欢我的文章请收藏我的个人网站:http://www.bubblyyi.com

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息