package com.baidu.phl.control;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.io.IOUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
/**
* 类没有前缀,url直接配置在方法上
*
*/
@Controller
public class MulipartFileController {
private Log log = LogFactory.getLog(MulipartFileController.class);
/**
* multipartFile参数,不可以从request.getAttribute获取,只能通过下面参数的方式
*
* @param model
* @param request
* @param multipartFile
* @return
* @throws Exception
*/
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(ModelMap model, HttpServletRequest request, @RequestParam(value = "myfile") MultipartFile multipartFile) throws Exception {
log.info(multipartFile.getName());
File file = new File("c:/my.txt");
multipartFile.transferTo(file);
model.put("status", "success!!!");
return "home";
}
/**
* 返回类型为void
*
* @param response
* @throws Exception
*/
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void download(HttpServletResponse response) throws Exception {
OutputStream os = response.getOutputStream();
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=" + new String("朴海林的文件.txt".getBytes("GB18030"), "ISO8859-1"));
//方法一:不推荐,原始java.io流操作
// BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:/my.txt"));
// byte[] buffer = new byte[1000];
// int len = bis.read(buffer);
// os.write(buffer, 0, len);
//方法二:推荐,借助commons.io.IOUTils
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("c:/my.txt"));
byte[] buffer = IOUtils.toByteArray(bis);
os.write(buffer);
}
}