springboot+element-ui實(shí)現(xiàn)文件的上傳下載

描述:
???文件上傳:通過element-ui的<el-upload>完成文件的上傳到服務(wù)端稍刀,并將文件的二進(jìn)制數(shù)據(jù)存儲(chǔ)到mysql柠新。
???文件下載:查詢mysql將文件二進(jìn)制數(shù)據(jù)以流形式輸出者春。

  1. 上傳
    進(jìn)入element-ui官方腋舌,找到Upload 上傳組件渣聚,找第一個(gè)案例帆离,點(diǎn)擊在線運(yùn)行蔬蕊,如下:
    2.png

修改代碼,添加自己預(yù)先定義好的上傳接口哥谷,如下:


1.png

springboot后臺(tái)代碼岸夯,如下:

@RestController
@RequestMapping("/file")
@CrossOrigin //必須要加跨域請(qǐng)求注解
public class FileController {
    @Autowired
    private JdbcTemplate jdbc; //spring-jdbc

 @RequestMapping("/upload")
    public String upload(MultipartFile file) throws IOException {
        String fileName = file.getOriginalFilename();
        long size = file.getSize();
        String type = fileName.substring(fileName.lastIndexOf(".") + 1);
        //讀取文件二進(jìn)制存儲(chǔ)到數(shù)據(jù)庫,mysql字段類型longblob
        byte[] buffer = file.getBytes();
        final Map map = new HashMap<String, Integer>();
        String uuid = UUID.randomUUID().toString().replace("-","");
        String sql = "insert into files(id,name,size,type,data) values(?,?,?,?,?)";
        final LobHandler lobHandler = new DefaultLobHandler();
        jdbc.execute(sql, new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
            @Override
            protected void setValues(PreparedStatement ps, LobCreator lobCreator) throws SQLException, DataAccessException {
                ps.setString(1,uuid);
                ps.setString(2,fileName);
                ps.setDouble(3,size);
                ps.setString(4,type);
                lobCreator.setBlobAsBytes(ps,5,buffer);
            }
        });
         //常規(guī)的存儲(chǔ)到本項(xiàng)目files文件夾中
//         OutputStreamWriter osw =
//                new OutputStreamWriter(new FileOutputStream("./files/"+fileName));
//         InputStreamReader isr =
//                new InputStreamReader(file.getInputStream());
//        char[] bytes = new char[12];
//        while (isr.read(bytes) != -1){
//            osw.write(bytes);
//        }
//        try{
//            osw.close();
//            isr.close();
//        }catch (IOException e){
//            e.printStackTrace();
//        }
        return null;
    }
}

mysql表結(jié)構(gòu)如下:


3.png
  1. 下載
    springboot后臺(tái)代碼如下:
@RestController
@RequestMapping("/file")
@CrossOrigin
public class FileController {
    @Autowired
    private JdbcTemplate jdbc;
    
        @RequestMapping("/down")
    public String downLoad(HttpServletResponse response) throws Exception {
        //第一種常規(guī)的從本地讀取文件輸出到response
//        String filePath = "D:/圖片資料/綦江人民政府.png";
//        File file = new File(filePath);
//        if (file.exists()){
//            response.setContentType("application/vnd.ms-excel;charset=UTF-8");
//            response.setCharacterEncoding("UTF-8");
//            response.setHeader("Content-Disposition", "attachment;fileName=" +   java.net.URLEncoder.encode("綦江人民政府.png","UTF-8"));
//            byte[] buffer = new byte[1024];
//
//            FileInputStream fis = null;
//            BufferedInputStream bis = null;
//            OutputStream os = null;
//            try{
//                os = response.getOutputStream();
//                fis = new FileInputStream(file);
//                bis = new BufferedInputStream(fis);
//                int i = bis.read(buffer);
//                while (i != -1){
//                    os.write(buffer);
//                    i = bis.read(buffer);
//                }
//            }catch (Exception e){
//                e.printStackTrace();
//            }
//            try {
//                bis.close();
//                fis.close();
//            }catch (IOException e){
//                e.printStackTrace();
//            }
//        }
        // 第二種讀取數(shù)據(jù)庫二進(jìn)制數(shù)據(jù)輸出
        response.setContentType("application/vnd.ms-excel;charset=UTF-8");
        OutputStream os = response.getOutputStream();
        response.setCharacterEncoding("UTF-8");
        final   LobHandler  lobHandler = new DefaultLobHandler();
        String sql ="select name,data from files where id = '21d2caa89e1e4e2f8d3e422741f0d29d'";
        jdbc.query(sql, new AbstractLobStreamingResultSetExtractor() {
            @Override
            protected void streamData(ResultSet resultSet) throws SQLException, IOException, DataAccessException {
                String fileName = lobHandler.getClobAsString(resultSet,1);
                response.setHeader("Content-Disposition", "attachment;fileName=" +   java.net.URLEncoder.encode(fileName,"UTF-8"));
                InputStream is = lobHandler.getBlobAsBinaryStream(resultSet, 2);
                if (is != null) FileCopyUtils.copy(is,os);
            }
        });
        try {
            os.close();
        }catch (IOException e){
            e.printStackTrace();
        }
        return null;
    }
}

參考:
SpringBoot實(shí)現(xiàn)文件的上傳和下載
SpringBoot+element-ui進(jìn)行文件上傳
使用jdbcTemplate 保存圖片 至數(shù)據(jù)庫 以及 從數(shù)據(jù)庫讀取 保存到本地

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末们妥,一起剝皮案震驚了整個(gè)濱河市猜扮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌监婶,老刑警劉巖旅赢,帶你破解...
    沈念sama閱讀 216,496評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異惑惶,居然都是意外死亡煮盼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門带污,熙熙樓的掌柜王于貴愁眉苦臉地迎上來僵控,“玉大人,你說我怎么就攤上這事鱼冀”ㄆ疲” “怎么了悠就?”我有些...
    開封第一講書人閱讀 162,632評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)泛烙。 經(jīng)常有香客問我理卑,道長(zhǎng)翘紊,這世上最難降的妖魔是什么蔽氨? 我笑而不...
    開封第一講書人閱讀 58,180評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮帆疟,結(jié)果婚禮上鹉究,老公的妹妹穿的比我還像新娘。我一直安慰自己踪宠,他們只是感情好自赔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,198評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著柳琢,像睡著了一般绍妨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柬脸,一...
    開封第一講書人閱讀 51,165評(píng)論 1 299
  • 那天他去,我揣著相機(jī)與錄音,去河邊找鬼倒堕。 笑死灾测,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的垦巴。 我是一名探鬼主播媳搪,決...
    沈念sama閱讀 40,052評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼骤宣!你這毒婦竟也來了秦爆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤憔披,失蹤者是張志新(化名)和其女友劉穎等限,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體活逆,經(jīng)...
    沈念sama閱讀 45,324評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡精刷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,542評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔗候。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怒允。...
    茶點(diǎn)故事閱讀 39,711評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖锈遥,靈堂內(nèi)的尸體忽然破棺而出纫事,到底是詐尸還是另有隱情勘畔,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評(píng)論 5 343
  • 正文 年R本政府宣布丽惶,位于F島的核電站炫七,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏钾唬。R本人自食惡果不足惜万哪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,017評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抡秆。 院中可真熱鬧奕巍,春花似錦、人聲如沸儒士。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽着撩。三九已至诅福,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拖叙,已是汗流浹背氓润。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留憋沿,地道東北人旺芽。 一個(gè)月前我還...
    沈念sama閱讀 47,722評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像辐啄,于是被迫代替她去往敵國和親采章。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,611評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容