spring boot file上传

用Spring Boot写读取Excel文件小工具的时候遇到的一些小坑已经填平,复制即可满足普通的文件上传功能
POI方面只需一个包,其他通用包工程中一般都会带
TIPS:前端为了扩展我用ajax异步请求,表单提交也支持,form表单
enctype="multipart/form-data"始终需要
注:不要导入多余的 MultipartFile 相关配置,spring boot已自带文件上传功能

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.9</version>
</dependency>

package sz.tools.controller;

import com.alibaba.fastjson.JSON;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.*;import java.util.Iterator;/**
 * 组合商品产品小工具
 *
 * @author LiuZhibo
 * @date 2018年7月21日15:17:13
 */
@RestController
public class CombinationController {

    @RequestMapping("/combination")
    public String combination(HttpServletRequest request, @RequestParam("file") MultipartFile file) throws IOException {

        Assert.isTrue(file != null, "file is null");
        Assert.isTrue(file.getSize() > 0, "file is null");

        File f = null;
        InputStream ins = file.getInputStream();
        f = new File(file.getOriginalFilename());
        inputStreamToFile(ins, f);

        Assert.isTrue(f != null, "file is null");
        Assert.isTrue(f.length() > 0, "file is null");

        FileInputStream fileInputStream = new FileInputStream(f);

        Workbook workbook = getWorkbook(f.getName(), fileInputStream);

        fileInputStream.close();
        Sheet sheet = workbook.getSheetAt(0); // 获取到第一个sheet
        Iterator<Row> iterator = sheet.rowIterator();
        if (iterator.hasNext()) {
            iterator.next(); // 跳过第一列
        }

        while (iterator.hasNext()) {
            try {
                Row row = iterator.next();
                Cell baseCell = row.getCell(1);
            } catch (Exception e) {
                e.printStackTrace();
                break;
            }
        }
        return null;
    }

    private static Workbook getWorkbook(String fileName, FileInputStream fileInputStream) throws IOException {
        Workbook workbook;
        String extString = fileName.substring(fileName.lastIndexOf("."));
        if (".xls".equals(extString)) {
            workbook = new HSSFWorkbook(fileInputStream);
        } else if (".xlsx".equals(extString)) {
            workbook = new XSSFWorkbook(fileInputStream);
        } else {
            workbook = null;
        }
        return workbook;
    }

    public static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
--------------------------------------以下为HTML部分--------------------------------------------------------------
<html>
<head>
    <title>Title</title>
</head>
<body>
    <form id="fileForm" action="combination" enctype="multipart/form-data">
        <input type="file" name="file" value="上传Excel"/>
        <a href="javascript:;" id="submit">提交</a>
    </form>
<div id="showContent"></div>
</body>
<script type="text/javascript" src="//cdn.bootcss.com/jquery/1.11.3/jquery.min.js"></script>

<script type="text/javascript">
    $("#submit").click(function () {
    var formData = new FormData(document.getElementById("fileForm"));//表单id
        $.ajax({
            type:"post",
            data:formData,
            url: "combination",
            processData:false,
            contentType:false,
            success:function(data){
                $("#showContent").html("");
                var json = JSON.parse(data);
                $.each(json, function(idx, obj) {
                    $("#showContent").append(obj + "<br/>")
                });
                alert("请求成功!");
            },
            error:function(e){
                alert("错误!!");
                console.log(data);
            }
        });
    });
</script>
</html>

 

 

 

posted @ 2018-07-25 09:13  刘野  阅读(814)  评论(0编辑  收藏  举报