Spring MultipartFile 上傳 與 excel處理
阿新 • • 發佈:2019-01-07
一、配置
1、*-servlet.xml (WebApploicationContext)
- <!-- file upload -->
- <bean id="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <property name="maxUploadSize" value="5000000"
/>
- <property name="maxInMemorySize" value=
- <property name="defaultEncoding" value="GBK"
/>
- </bean>
- <!--
=== excel檔案上傳頁面
=== -->
- <bean name="/excelupload.do" class="test.ExcelUpload">
- <property name="formView" value="atest"
/>
- <property name="successView"
- <property name="commandName" value="upload"
/>
- <property name="commandClass" value="test.UploadDTO"
/>
- </bean>
二、程式碼
1、使用MultipartFile
- import
java.io.Serializable;
- import org.springframework.web.multipart.MultipartFile;
- public class UploadDTO
implements
- private MultipartFile
file;
- /**
- * @return Returns the file.
- */
- public MultipartFile
getFile()
{
- return
file;
- }
- /**
- * @param file The file to set.
- */
- public void
setFile(MultipartFile
file)
{
- this.file
= file;
- }
- }
- import
java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.Enumeration;
- import java.util.Iterator;
- import java.util.List;
- import javax.servlet.ServletException;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFRow;
- import org.apache.poi.hssf.usermodel.HSSFSheet;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.springframework.validation.BindException;
- import org.springframework.web.bind.ServletRequestDataBinder;
- import org.springframework.web.multipart.MultipartFile;
- import org.springframework.web.multipart.MultipartHttpServletRequest;
- import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.SimpleFormController;
- public class ExcelUpload
extends SimpleFormController
{
- protected ModelAndView onSubmit(HttpServletRequest
request,
- HttpServletResponse response,
Object command,
BindException errors)
- throws
Exception {
- logger.info("Excel upload=================================start");
- MultipartHttpServletRequest multipartRequest
= (MultipartHttpServletRequest)
request;
- MultipartFile multipartFile = multipartRequest.getFile("file");
- Enumeration names
= request.getParameterNames();
- while
(names.hasMoreElements())
{
- String
name = (String) names.nextElement();
- logger.debug(name+"="+request.getParameter(name));
- }
- logger.info("Excel upload=================================end");
- return
super.onSubmit(request, response,
command, errors);
- }
- }
- import
java.io.Serializable;
- import org.springframework.web.multipart.MultipartFile;
- public class UploadDTO
implements Serializable
{
- private byte[]
file;
- /**
- * @return Returns the file.
- */
- public byte[]
getFile()
{
- return
file;
- }
- /**
- * @param file The file to set.
- */
- public void
setFile(byte[]
file)
{
- this.file
= file;
- }
- }
- public
class ExcelUpload extends SimpleFormController
{
- protected
void initBinder(HttpServletRequest
request,
- ServletRequestDataBinder binder)
throws ServletException
{
- binder.registerCustomEditor(byte[].class,
- new ByteArrayMultipartFileEditor());
- }
- protected ModelAndView onSubmit(HttpServletRequest
request,
- HttpServletResponse response,
Object command,
BindException errors)
- throws
Exception {
- logger.info("Excel upload=================================start");
- MultipartHttpServletRequest multipartRequest
= (MultipartHttpServletRequest)
request;
- MultipartFile multipartFile = multipartRequest.getFile("file");
- logger.debug(Long.toString(multipartFile.getSize()));
- logger.info("Excel upload=================================end");
- return
super.onSubmit(request, response,
command, errors);
- }
- }
附:
1、另存上傳檔案
- public
void SaveFileFromInputStream(InputStream
stream,
String path,
- String filename)
throws IOException
{
- FileOutputStream fs
= new FileOutputStream(path
+ "/"
+ filename);
- byte[]
buffer =
new byte[1024
* 1024];
- int bytesum
= 0;
- int byteread
= 0;
- while
((byteread
= stream.read(buffer))
!=
-1) {
- bytesum += byteread;
- fs.write(buffer, 0, byteread);
- fs.flush();
- }
- fs.close();
- stream.close();
- }
2、Excel檔案處理(POI - 2.5)
- private
int getTargetList(MultipartFile multipartFile,
- HttpServletRequest request,
Date insuranceBeginTime,
String planCode)
- throws
Exception {
- String fileType
= "";
- try {
- String fileName
= multipartFile.getOriginalFilename();
- fileType = fileName.substring(fileName.lastIndexOf(".")
+ 1,
- fileName.lastIndexOf(".")
+ 4);
- } catch
(Exception e)
{
- logger.error(e);
- fileType =
"";
- }
- if (!fileType.toLowerCase().equals("xls"))
{
- // throw new BusinessServiceException("匯入的檔案格式不正確,應該不是excel檔案");
- this.logger.debug("匯入的檔案格式不正確,應該不是excel檔案");
- return 0;
- }
- HSSFWorkbook wb =
null;
- try {
- wb =
new HSSFWorkbook(multipartFile.getInputStream());
- // logger.debug(wb.getNumberOfSheets());
- HSSFSheet sheet = wb.getSheetAt(0);
- logger.debug("sheet name = "+wb.getSheetName(0));
- for(int i
= sheet.getFirstRowNum();i<=sheet.getLastRowNum();i++){
- HSSFRow row = sheet.getRow(i);
- Iterator cells
= row.cellIterator();
- while(cells.hasNext()){
- HSSFCell cell =
(HSSFCell) cells.next();
- logger.debug(cell.getStringCellValue());
- }
- }
- logger.debug("last row = "+sheet.getLastRowNum());
- return wb.getNumberOfSheets();
- // return sheet.getFirstRowNum();
- } catch
(Exception e)
{
- logger.error(e);
- // throw new
- // BusinessServiceException("未知原因!儲存Excel檔案時,請不要將滑鼠最終定位在Excel中的可以下拉選值的列上。");
- }
- // ApplicationContext ctx =
- // ApplicationWebContexton.getInstance(request);
- // IImportExcelTarget excelParser = (IImportExcelTarget)
- // ctx.getBean(planCode);
- // return excelParser.getTargetList(wb, request,
- // insuranceBeginTime,planCode);
- return 0;
- }
3、request.parameters = 與上傳檔案同表單的 field value
- <form
action="excelupload.do"
method="post" enctype="multipart/form-data"
name="form1">
- <table
width="100%"
border="0" cellspacing="1" cellpadding="0">
- <tr>
- <td> </td>
- <td> </td>
- <td> </td>
- </tr>
- <tr>
- <td> </td>
- <td><label>上傳
- <input
type="file"
name="file">
- </label></td>
- <td> </td>
- </tr>
- <tr>
- <td> </td>
- <td> <input
name="assas"
type="text"
id="assas"
value="asdsadas">
- <input type="submit"
name="Submit"
value="提交"></td>
- <td> </td>
- </tr>
- </table>
- </form>