SSM实现文件上传下载

1.controller

package com.meeting.attachment.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.URLEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

import com.core.common.BaseController;
import com.core.model.Attachment;
import com.meeting.attachment.service.AttachmentService;
import com.utils.MeetingUtil;

@Controller
@RequestMapping("attachment")
public class AttachmentController extends BaseController {

	@Autowired
	AttachmentService attachmentService;
	
	@RequestMapping(value="upload")
	@ResponseBody
	public Map<String, Object> uploadFiles(HttpServletRequest request){
		Attachment attach = new Attachment();
		Map<String, Object> map = new HashMap<String, Object>();
		try {
			String realPath = request.getSession().getServletContext().getRealPath("upload");
			Calendar c = Calendar.getInstance();
			int year = c.get(Calendar.YEAR);
			int month = c.get(Calendar.MONTH)+1;
			int day = c.get(Calendar.DATE);
			String dPath = "\\attach\\" + year + "\\" + month + "\\" + day + "\\"; // 用日期创建文件夹,防止重复
			realPath += dPath;
			File filePath = new File(realPath);
			if(!filePath.exists()){
				filePath.mkdirs();
			}
			List<String> list = new ArrayList<String>(); // 存放结果
			CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
			if (multipartResolver.isMultipart(request)) {
				MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
				Iterator<String> iter = multipartRequest.getFileNames();
				while (iter.hasNext()) {
					MultipartFile file = multipartRequest.getFile(iter.next().toString());
					if (file != null) {
						String str = file.getOriginalFilename();
						String suffix = str.substring(str.lastIndexOf("."));
						SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
						String dateStr = sdf.format(new Date());
						String name = dateStr + UUID.randomUUID().toString().replaceAll("-", "");
						String newFile = filePath + "\\" + name + suffix;
						try {
							file.transferTo(new File(newFile));
						} catch (IllegalStateException | IOException e) {
							e.printStackTrace();
						}
						//保存附件信息到数据库
						attach.setOriginal_name(str);
						attach.setSave_name(name+suffix);
						attach.setSave_path("upload\\"+dPath);
						attach.setCreate_by(MeetingUtil.getLoginUserId(request));
						attach.setCreate_time(new Date());
						attach.setFile_type(suffix);
						//attach.setMeeting_id(0L);
						attachmentService.inserServlet(attach);
						Long attachid = attach.getId();
						list.add(newFile);
						map.put("attachid", attachid);
					}
				}
			}
			
			request.setAttribute("path", list.get(0));
			map.put("status", 200);
			map.put("msg", "上传成功");
		} catch (Exception e) {
			map.put("status", 500);
			map.put("msg", "上传失败");
		}
        return map;
	}
	
	@RequestMapping(value="download")
	public void download(HttpServletRequest request,HttpServletResponse response,Long id) throws IOException{
		Attachment attach = attachmentService.selectByPrimaryKey(id);
		String realPath = request.getSession().getServletContext().getRealPath("upload");
		realPath = realPath.substring(0, realPath.indexOf("upload"));
		String savePath = attach.getSave_path();
		String savename = attach.getSave_name();
		//String webPath = request.getContextPath();
		String path = realPath + "\\" + savePath + "\\" + savename;
		String filename = attach.getOriginal_name();
		filename = URLEncoder.encode(filename, "utf-8");
		response.addHeader("Content-Disposition", "attachment;filename=" + filename);
		response.setContentType("multipart/form-data");   
        
		FileInputStream in = new FileInputStream(path);
		OutputStream out = response.getOutputStream();
        int len = 0;
        byte [] btyes = new byte[1024];
        while((len = in.read(btyes)) > 0){  
            out.write(btyes,0,len);  
        }  
        in.close();
        out.close();
	}
}

2.实体类(列只出属性)
private Long id;
	private String original_name;
	private String save_name;
	private String save_path;
	private String file_type;
	private Long obj_id;
	private Long create_by;
	private Date create_time;
	private Long status;
	private Long type; // 1message 2notes 3datum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值