文件上傳

新建一個模塊饰迹,在創(chuàng)建時勾選web和Thymeleaf依賴

新建一個upload.java文件

package com.springboot.upload.controller;

import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**

  • 上傳文件控制器
  • 直接上傳到服務器
    */

@Controller
public class UploadController {

//遇到http://localhost:8080,則跳轉(zhuǎn)到upload.html頁面
@GetMapping("/")
public String index(){
    return "upload";
}

@PostMapping("/upload")
public String fileUpload(@RequestParam("file")MultipartFile srcFile,
                         RedirectAttributes redirectAttributes){

    //生成系統(tǒng)時間
    SimpleDateFormat sf=new SimpleDateFormat("yyyyMMddHHmmss");
    String date=sf.format(new Date());

    //前端沒有選擇文件,srcFile為空
    if (srcFile.isEmpty()){
        redirectAttributes.addFlashAttribute("message", "請選擇一個文件");
        return "redirect:upload_status";
    }
    //選擇了文件,開始進行上傳操作
    try {
        //構(gòu)建上傳目標路徑
        File destFile=new File(ResourceUtils.getURL("classpath:").getPath());
        if (!destFile.exists()){
            destFile=new File("");
        }
        //輸出目標文件的絕對路徑
        System.out.println("file path:"+destFile.getAbsolutePath());
        //使用系統(tǒng)時間文件夾拼接目錄
        File upload=new File(destFile.getAbsolutePath(),date);
        //若目標文件夾不存在勤庐,則創(chuàng)建一個
        if (!upload.exists()){
            upload.mkdirs();
        }
        //生成UUID碼
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        // 獲得文件原始名稱
        String fileName = srcFile.getOriginalFilename();
        // 獲得文件后綴名稱
        String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
        // 生成最新的uuid文件名稱
        String newFileName = uuid + "."+ suffixName;
        System.out.println("完整的上傳路徑:"+upload.getAbsolutePath()+"/"+newFileName);
        //根據(jù)srcFile的大小嗜桌,準備一個字節(jié)數(shù)組
        byte[] bytes=srcFile.getBytes();
        //通過項目路徑奥溺,拼接上傳路徑
        Path path=Paths.get(upload.getAbsolutePath()+"/"+newFileName);
        //最重要的一步,將源文件寫入目標地址
        Files.write(path,bytes);
        //將文件上傳成功的信息寫入messages
        redirectAttributes.addFlashAttribute("message", "文件上傳成功骨宠!"+newFileName);

    } catch (IOException e) {
        e.printStackTrace();
    }
    return "redirect:upload_status";
}

//匹配upload_status頁面
@GetMapping("/upload_status")
public String uploadStatusPage(){
    return "upload_status";
}

}

在resources的templates下新建upload.html文件

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Spring Boot文件上傳頁面</title>
</head>
<body>
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="上傳">

</form>

</body>
</html>

同目錄中新建upload_status.html文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>文件上傳狀態(tài)顯示</title>
</head>
<body>
<h2>Spring Boot的文件上傳狀態(tài)</h2>
<div th:if="${message}"/>
<h2 th:text="${message}"/>
</body>
</html>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末浮定,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子层亿,更是在濱河造成了極大的恐慌桦卒,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匿又,死亡現(xiàn)場離奇詭異方灾,居然都是意外死亡,警方通過查閱死者的電腦和手機碌更,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門裕偿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人痛单,你說我怎么就攤上這事嘿棘。” “怎么了旭绒?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵鸟妙,是天一觀的道長。 經(jīng)常有香客問我挥吵,道長重父,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任蔫劣,我火速辦了婚禮坪郭,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘脉幢。我一直安慰自己歪沃,他們只是感情好,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布嫌松。 她就那樣靜靜地躺著沪曙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪萎羔。 梳的紋絲不亂的頭發(fā)上液走,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天,我揣著相機與錄音贾陷,去河邊找鬼缘眶。 笑死,一個胖子當著我的面吹牛髓废,可吹牛的內(nèi)容都是我干的巷懈。 我是一名探鬼主播,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼慌洪,長吁一口氣:“原來是場噩夢啊……” “哼顶燕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起冈爹,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤涌攻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后频伤,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體恳谎,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年憋肖,在試婚紗的時候發(fā)現(xiàn)自己被綠了因痛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡瞬哼,死狀恐怖婚肆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坐慰,我是刑警寧澤较性,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站结胀,受9級特大地震影響赞咙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜糟港,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一攀操、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧秸抚,春花似錦速和、人聲如沸歹垫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽排惨。三九已至,卻和暖如春碰凶,著一層夾襖步出監(jiān)牢的瞬間暮芭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工欲低, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辕宏,地道東北人。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓砾莱,卻偏偏與公主長得像瑞筐,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子恤磷,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

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

  • 基于Spring Boot的文件上傳上傳方式:1.直接上傳到應用服務器2.上傳到OSS(內(nèi)容存儲服務器面哼,如:阿里云...
    皮皮力_996a閱讀 36,654評論 1 5
  • 文件上傳方式:1.直接上傳到應用服務器(速度,容量) 2.上傳到oss(內(nèi)容存儲服務器)(阿里云扫步,七牛云)3.前端...
    六年的承諾閱讀 1,775評論 0 4
  • 基于Spring Boot的文件上傳上傳方式:1.直接上傳到應用服務器2.上傳到OSS(內(nèi)容存儲服務器魔策,如:阿里云...
    洋baby閱讀 787評論 0 1
  • 文件上傳是項目開發(fā)中的常見操作。一般分為如下幾種解決方案 直接上傳到應用服務器 上傳到阿里云河胎、七牛云等OSS服務器...
    Monica_b73c閱讀 324評論 0 0
  • 在對于考研與不考研的問題上闯袒。我糾結(jié)過很久。之所以會糾結(jié)游岳,就是因為內(nèi)心不想政敢。不想學習這些復雜的東西。感覺自己的腦子不...
    星星mam閱讀 733評論 0 0