Spring MultipartFile 上傳 與 excel處理 .
阿新 • • 發佈:2019-01-07
一、配置
1、*-servlet.xml (WebApploicationContext)
[xhtml] view plaincopyprint?- <!-- file upload -->
- <beanid="multipartResolver"
- class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
- <propertyname="maxUploadSize"value="5000000"/>
- <propertyname="maxInMemorySize"value
- <propertyname="defaultEncoding"value="GBK"/>
- </bean>
注意下面的commandClass值,
[xhtml] view plaincopyprint?- <!-- === excel檔案上傳頁面 === -->
- <beanname="/excelupload.do"class="test.ExcelUpload">
- <propertyname="formView"value="atest"/>
- <propertyname="successView"value="atest"/>
- <propertyname="commandName"value="upload"/>
- <propertyname
- </bean>
二、程式碼
1、使用MultipartFile
[java] view plaincopyprint?- import java.io.Serializable;
- import org.springframework.web.multipart.MultipartFile;
- publicclass UploadDTO implements Serializable {
- private MultipartFile file;
- /**
- * @return Returns the file.
- */
- public MultipartFile getFile() {
- return file;
- }
- /**
- * @param file The file to set.
- */
- publicvoid 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;
- publicclass 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");
- returnsuper.onSubmit(request, response, command, errors);
- }
- }
2、不使用MultipartFile
[java] view plaincopyprint?- import java.io.Serializable;
- import org.springframework.web.multipart.MultipartFile;
- publicclass UploadDTO implements Serializable {
- privatebyte[] file;
- /**
- * @return Returns the file.
- */
- publicbyte[] getFile() {
- return file;
- }
- /**
- * @param file The file to set.
- */
- publicvoid setFile(byte[] file) {
- this.file = file;
- }
- }
- publicclass ExcelUpload extends SimpleFormController {
- protectedvoid 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");
- returnsuper.onSubmit(request, response, command, errors);
- }
- }
附:
1、另存上傳檔案
[java] view plaincopyprint?- publicvoid SaveFileFromInputStream(InputStream stream, String path,
- String filename) throws IOException {
- FileOutputStream fs = new FileOutputStream(path + "/" + filename);
- byte[] buffer = newbyte[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)
[java] view plaincopyprint?- privateint 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檔案");
- return0;
- }
- 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);
- return0;
- }
3、request.parameters = 與上傳檔案同表單的 field value
[xhtml] view plaincopyprint?- <formaction="excelupload.do"method="post"enctype="multipart/form-data"name="form1">
- <tablewidth="100%"border="0"cellspacing="1"cellpadding="0">
- <tr>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td><label>上傳
- <inputtype="file"name="file">
- </label></td>
- <td></td>
- </tr>
- <tr>
- <td></td>
- <td><inputname="assas"type="text"id="assas"value="asdsadas">
- <inputtype="submit"name="Submit"value="提交"></td>
- <td></td>
- </tr>
- </table>
- </form>