1. 程式人生 > >Spring MultipartFile 上傳 與 excel處理 .

Spring MultipartFile 上傳 與 excel處理 .

一、配置

1、*-servlet.xml  (WebApploicationContext)

[xhtml] view plaincopyprint?
  1. <!-- file upload -->
  2. <beanid="multipartResolver"
  3. class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  4. <propertyname="maxUploadSize"value="5000000"/>
  5. <propertyname="maxInMemorySize"value
    ="4096"/>
  6. <propertyname="defaultEncoding"value="GBK"/>
  7. </bean>

注意下面的commandClass值,

[xhtml] view plaincopyprint?
  1. <!-- === excel檔案上傳頁面 === -->
  2. <beanname="/excelupload.do"class="test.ExcelUpload">
  3. <propertyname="formView"value="atest"/>
  4. <propertyname="successView"value="atest"/>
  5. <propertyname="commandName"value="upload"/>
  6. <propertyname
    ="commandClass"value="test.UploadDTO"/>
  7. </bean>

二、程式碼

1、使用MultipartFile

[java] view plaincopyprint?
  1. import java.io.Serializable;  
  2. import org.springframework.web.multipart.MultipartFile;  
  3. publicclass UploadDTO implements Serializable {  
  4. private MultipartFile file;  
  5. /** 
  6.      * @return Returns the file. 
  7.      */
  8. public MultipartFile getFile() {  
  9. return file;  
  10.     }  
  11. /** 
  12.      * @param file The file to set. 
  13.      */
  14. publicvoid setFile(MultipartFile file) {  
  15. this.file = file;  
  16.     }   
  17. }  
[java] view plaincopyprint?
  1. import java.io.FileOutputStream;  
  2. import java.io.IOException;  
  3. import java.io.InputStream;  
  4. import java.util.ArrayList;  
  5. import java.util.Date;  
  6. import java.util.Enumeration;  
  7. import java.util.Iterator;  
  8. import java.util.List;  
  9. import javax.servlet.ServletException;  
  10. import javax.servlet.http.HttpServletRequest;  
  11. import javax.servlet.http.HttpServletResponse;  
  12. import org.apache.poi.hssf.usermodel.HSSFCell;  
  13. import org.apache.poi.hssf.usermodel.HSSFRow;  
  14. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  15. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  16. import org.springframework.validation.BindException;  
  17. import org.springframework.web.bind.ServletRequestDataBinder;  
  18. import org.springframework.web.multipart.MultipartFile;  
  19. import org.springframework.web.multipart.MultipartHttpServletRequest;  
  20. import org.springframework.web.multipart.support.ByteArrayMultipartFileEditor;  
  21. import org.springframework.web.servlet.ModelAndView;  
  22. import org.springframework.web.servlet.mvc.SimpleFormController;  
  23. publicclass ExcelUpload extends SimpleFormController {  
  24. protected ModelAndView onSubmit(HttpServletRequest request,  
  25.             HttpServletResponse response, Object command, BindException errors)  
  26. throws Exception {  
  27.         logger.info("Excel upload=================================start");  
  28.         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  
  29.         MultipartFile multipartFile = multipartRequest.getFile("file");  
  30.         Enumeration names = request.getParameterNames();  
  31. while (names.hasMoreElements()) {  
  32.             String name = (String) names.nextElement();  
  33.             logger.debug(name+"="+request.getParameter(name));  
  34.         }  
  35.         logger.info("Excel upload=================================end");  
  36. returnsuper.onSubmit(request, response, command, errors);  
  37.     }  
  38. }  

2、不使用MultipartFile

[java] view plaincopyprint?
  1. import java.io.Serializable;  
  2. import org.springframework.web.multipart.MultipartFile;  
  3. publicclass UploadDTO implements Serializable {  
  4. privatebyte[] file;  
  5. /** 
  6.      * @return Returns the file. 
  7.      */
  8. publicbyte[] getFile() {  
  9. return file;  
  10.     }  
  11. /** 
  12.      * @param file The file to set. 
  13.      */
  14. publicvoid setFile(byte[] file) {  
  15. this.file = file;  
  16.     }   
  17. }  
[java] view plaincopyprint?
  1. publicclass ExcelUpload extends SimpleFormController {  
  2. protectedvoid initBinder(HttpServletRequest request,  
  3.             ServletRequestDataBinder binder) throws ServletException {  
  4.         binder.registerCustomEditor(byte[].class,  
  5. new ByteArrayMultipartFileEditor());  
  6.     }  
  7. protected ModelAndView onSubmit(HttpServletRequest request,  
  8.             HttpServletResponse response, Object command, BindException errors)  
  9. throws Exception {  
  10.         logger.info("Excel upload=================================start");  
  11.         MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;  
  12.         MultipartFile multipartFile = multipartRequest.getFile("file");  
  13.         logger.debug(Long.toString(multipartFile.getSize()));  
  14.         logger.info("Excel upload=================================end");  
  15. returnsuper.onSubmit(request, response, command, errors);  
  16.     }  
  17. }  

附:

1、另存上傳檔案

[java] view plaincopyprint?
  1. publicvoid SaveFileFromInputStream(InputStream stream, String path,  
  2.             String filename) throws IOException {  
  3.         FileOutputStream fs = new FileOutputStream(path + "/" + filename);  
  4. byte[] buffer = newbyte[1024 * 1024];  
  5. int bytesum = 0;  
  6. int byteread = 0;  
  7. while ((byteread = stream.read(buffer)) != -1) {  
  8.             bytesum += byteread;  
  9.             fs.write(buffer, 0, byteread);  
  10.             fs.flush();  
  11.         }  
  12.         fs.close();  
  13.         stream.close();  
  14.     }  

2、Excel檔案處理(POI - 2.5)

[java] view plaincopyprint?
  1. privateint getTargetList(MultipartFile multipartFile,  
  2.         HttpServletRequest request, Date insuranceBeginTime, String planCode)  
  3. throws Exception {  
  4.     String fileType = "";  
  5. try {  
  6.         String fileName = multipartFile.getOriginalFilename();  
  7.         fileType = fileName.substring(fileName.lastIndexOf(".") + 1,  
  8.                 fileName.lastIndexOf(".") + 4);  
  9.     } catch (Exception e) {  
  10.         logger.error(e);  
  11.         fileType = "";  
  12.     }  
  13. if (!fileType.toLowerCase().equals("xls")) {  
  14. // throw new BusinessServiceException("匯入的檔案格式不正確,應該不是excel檔案");
  15. this.logger.debug("匯入的檔案格式不正確,應該不是excel檔案");  
  16. return0;  
  17.     }  
  18.     HSSFWorkbook wb = null;  
  19. try {  
  20.         wb = new HSSFWorkbook(multipartFile.getInputStream());  
  21. // logger.debug(wb.getNumberOfSheets());
  22.         HSSFSheet sheet = wb.getSheetAt(0);  
  23.         logger.debug("sheet name = "+wb.getSheetName(0));  
  24. for(int i = sheet.getFirstRowNum();i<=sheet.getLastRowNum();i++){  
  25.             HSSFRow row = sheet.getRow(i);  
  26.             Iterator cells = row.cellIterator();  
  27. while(cells.hasNext()){  
  28.                 HSSFCell cell = (HSSFCell) cells.next();                      
  29.                 logger.debug(cell.getStringCellValue());                      
  30.             }  
  31.         }  
  32.         logger.debug("last row = "+sheet.getLastRowNum());  
  33. return wb.getNumberOfSheets();  
  34. /           return sheet.getFirstRowNum();  
  35.     } catch (Exception e) {  
  36.         logger.error(e);  
  37. // throw new
  38. // BusinessServiceException("未知原因!儲存Excel檔案時,請不要將滑鼠最終定位在Excel中的可以下拉選值的列上。");
  39.     }  
  40. // ApplicationContext ctx =
  41. // ApplicationWebContexton.getInstance(request);
  42. // IImportExcelTarget excelParser = (IImportExcelTarget)
  43. // ctx.getBean(planCode);
  44. // return excelParser.getTargetList(wb, request,
  45. // insuranceBeginTime,planCode);
  46. return0;  
  47. }  

3、request.parameters = 與上傳檔案同表單的 field value

[xhtml] view plaincopyprint?
  1. <formaction="excelupload.do"method="post"enctype="multipart/form-data"name="form1">
  2. <tablewidth="100%"border="0"cellspacing="1"cellpadding="0">
  3. <tr>
  4. <td></td>
  5. <td></td>
  6. <td></td>
  7. </tr>
  8. <tr>
  9. <td></td>
  10. <td><label>上傳  
  11. <inputtype="file"name="file">
  12. </label></td>
  13. <td></td>
  14. </tr>
  15. <tr>
  16. <td></td>
  17. <td><inputname="assas"type="text"id="assas"value="asdsadas">
  18. <inputtype="submit"name="Submit"value="提交"></td>
  19. <td></td>
  20. </tr>
  21. </table>
  22. </form>