最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring?Boot簡(jiǎn)單實(shí)現(xiàn)文件上傳功能

 更新時(shí)間:2022年08月23日 15:42:18   作者:不斷前進(jìn)的皮卡丘  
這篇文章主要介紹了Spring?Boot簡(jiǎn)單實(shí)現(xiàn)文件上傳功能,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

前言

  • 前端處理 通過(guò)form表單來(lái)上傳文件
  • 提交方式為post
  • enctype格式為"multipart/form-data"
  • input類(lèi)型為file
  • name屬性必須和Controller中方法的形參名稱一致
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h2>用戶注冊(cè)</h2>
    <form action="/register" method="post" enctype="multipart/form-data">
        用戶名:<input type="text" name="username"><br><br>
        密碼  :<input type="password" name="password"><br><br>
        頭像  :<input type="file" name="uploadFile"><br><br>
        <input type="submit" value="提交">
    </form>
</body>
</html>

后端處理

創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)用來(lái)保存登錄的用戶名,密碼,文件名

我們可以寫(xiě)一個(gè)工具類(lèi):

public class UUIDUtils {
    public static String createNewUUID(){
        String uuid = UUID.randomUUID().toString();
        //如果要把uuid的-去掉替換成空字符串 然后需要把32為字符串變成64字符串
        uuid = uuid.replace("-", "");
        return uuid+uuid;
    }
}

實(shí)體類(lèi)User:

@Data
public class User {
    private Integer id;
    private String username;
    private String password;
    private String filename;
}

Controller:

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 顯示注冊(cè)畫(huà)面
     * @return
     */
    @RequestMapping("/show")
    public String show(){
        return "/page/register.html";
    }
    @PostMapping("/register")
    public String register(User user, @RequestParam("uploadFile") MultipartFile uploadFile){
        System.out.println("用戶:"+user);
        System.out.println("文件:"+uploadFile);
        //創(chuàng)建本地文件
        //思考文件名,文件名要是唯一的 必須要保證每一個(gè)用戶注冊(cè)上傳的圖片,文件等,必須保存成唯一的文件名
        //Java技術(shù) Java UUID User Unique ID 本身用于給用戶指定唯一的ID,可以用它來(lái)產(chǎn)生唯一的隨機(jī)字符串
        //uuid默認(rèn)返回的是32位字母組成的隨機(jī)字符串,重復(fù)的概率幾乎為0
        //創(chuàng)建唯一文件名
        String fileName= UUIDUtils.createNewUUID();
        //我們需要文件的后綴也應(yīng)該不是寫(xiě)死的,前端上傳的后綴是啥,我們保存的就是什么
        //獲取原生文件的文件名
        String originalFilename = uploadFile.getOriginalFilename();
        System.out.println(originalFilename);
        //創(chuàng)建文件的后綴名
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //創(chuàng)建新的文件路徑
        String filePath=fileName+suffix;

        File srcFile = new File("D:/springboot/download/img/"+filePath);
        try {
            //把前端傳送的文件保存在本地中
            uploadFile.transferTo(srcFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
        user.setFilename(filePath);
        try {
            userService.register(user);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }
}

Service

public interface UserService {
    void register(User user) throws Exception;
}

Service實(shí)現(xiàn)類(lèi)

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public void register(User user) throws Exception {
        userMapper.insert(user);
    }
}

Mapper

@Mapper
public interface UserMapper {
    @Insert("insert into user values(default,#{username},#{password},#{filename})")
    void insert(User user);
}

物理路徑和虛擬路徑映射

先準(zhǔn)備好頁(yè)面jsp

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8">
        <title>Title</title>
      </head>
      <body>
        <h2>文件的上傳</h2>
        <form action="/file/upload" method="post" enctype="multipart/form-data">
          文件上傳:<input type="file" name="uploadFile">


          <input type="submit" value="提交">
        </form>
      </body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <img src="/img/${filePath}">圖像</img>
    路徑:${filePath}
</body>
</html>

編寫(xiě)Controller

@Controller
@RequestMapping("/file")
public class FileUploadController {
    /**
    * 顯示畫(huà)面
    * @return
    */
    @RequestMapping("/show")
    public String show(){
        return "file.jsp";
    }

    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    public String fileUpload(MultipartFile uploadFile, HttpSession session){
        //利用uuid創(chuàng)建唯一的字符串 讓這個(gè)字符串作為文件名
        String fileName = UUIDUtils.createNewUUID();

        //獲取上傳文件的文件名
        String originalFilename = uploadFile.getOriginalFilename();
        //獲取后綴名
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        //創(chuàng)建文件保存路徑
        String filePath=fileName+suffix;
        File srcFile=new File("D:/springboot/download/img/"+filePath);
        //把前端文件保存在本地
        try {
            uploadFile.transferTo(srcFile);
            //把文件存放在本地的文件路徑保存在session域中
            session.setAttribute("filePath", filePath);

        } catch (IOException e) {
            e.printStackTrace();
        }
        //我們希望網(wǎng)頁(yè)上可以把圖片顯示出來(lái)
        System.out.println("文件存放路徑:"+filePath);
        return "show.jsp";
    }
}

不過(guò),我們可以發(fā)現(xiàn),當(dāng)我們點(diǎn)擊提交的時(shí)候,圖片還是無(wú)法顯示:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    //實(shí)現(xiàn)資源的虛擬路徑和物理路徑的映射

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
         registry.addResourceHandler("/img/**")
                 .addResourceLocations("file:"+"D:\\springboot\\download\\img\\");
    }
}

addResourceHandler(“xxx”) 用于指定對(duì)外暴露的訪問(wèn)路徑,addResourceLocations(“xxx”) 用于指定文件放置路徑

到此這篇關(guān)于Spring Boot簡(jiǎn)單實(shí)現(xiàn)文件上傳功能的文章就介紹到這了,更多相關(guān)Spring Boot文件上傳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java序列化中子類(lèi)、父類(lèi)構(gòu)造函數(shù)問(wèn)題實(shí)例分析

    Java序列化中子類(lèi)、父類(lèi)構(gòu)造函數(shù)問(wèn)題實(shí)例分析

    這篇文章主要介紹了Java序列化中子類(lèi)、父類(lèi)構(gòu)造函數(shù)問(wèn)題,結(jié)合實(shí)例形式分析了java父類(lèi)與子類(lèi)構(gòu)造函數(shù)中序列化接口調(diào)用相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合

    Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)檢查多個(gè)時(shí)間段是否有重合,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面

    springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面

    這篇文章主要介紹了springMVC如何將controller中數(shù)據(jù)傳遞到j(luò)sp頁(yè)面,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Springboot詳解線程池與多線程及阻塞隊(duì)列的應(yīng)用詳解

    Springboot詳解線程池與多線程及阻塞隊(duì)列的應(yīng)用詳解

    本例應(yīng)用線程池、多線程、阻塞隊(duì)列處理一個(gè)流程任務(wù)。本例處理一個(gè)訂單流程,主要包括生成訂單、訂單處理、訂單入庫(kù),下面我們一起看看
    2022-06-06
  • Java的volatile和sychronized底層實(shí)現(xiàn)原理解析

    Java的volatile和sychronized底層實(shí)現(xiàn)原理解析

    文章詳細(xì)介紹了Java中的synchronized和volatile關(guān)鍵字的底層實(shí)現(xiàn)原理,包括字節(jié)碼層面、JVM層面的實(shí)現(xiàn)細(xì)節(jié),以及鎖的類(lèi)型和MESI協(xié)議在多核處理器中的作用,文章還探討了synchronized和volatile的區(qū)別,以及如何通過(guò)Atomic類(lèi)來(lái)實(shí)現(xiàn)更細(xì)粒度的原子操作,感興趣的朋友一起看看吧
    2025-03-03
  • 關(guān)于javaWeb中405錯(cuò)誤的解決方法

    關(guān)于javaWeb中405錯(cuò)誤的解決方法

    下面小編就為大家?guī)?lái)一篇關(guān)于javaWeb中405錯(cuò)誤的解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 詳談Java多線程的幾個(gè)常用關(guān)鍵字

    詳談Java多線程的幾個(gè)常用關(guān)鍵字

    下面小編就為大家?guī)?lái)一篇詳談Java多線程的幾個(gè)常用關(guān)鍵字。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • java內(nèi)部類(lèi)的那些事兒_讓你一看就弄明白

    java內(nèi)部類(lèi)的那些事兒_讓你一看就弄明白

    本篇文章介紹了,java內(nèi)部類(lèi)的那些事兒。需要的朋友參考下
    2013-05-05
  • Java中Collection和Collections的區(qū)別

    Java中Collection和Collections的區(qū)別

    Collection是一個(gè)集合接口,集合類(lèi)的頂級(jí)接口,Collections是一個(gè)包裝類(lèi),本文主要介紹了Java中Collection和Collections的區(qū)別,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • springboot查看和修改內(nèi)置tomcat版本的方法步驟

    springboot查看和修改內(nèi)置tomcat版本的方法步驟

    本文主要介紹了springboot查看和修改內(nèi)置tomcat版本的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07

最新評(píng)論

合肥市| 城口县| 铜梁县| 荆门市| 迭部县| 琼中| 漠河县| 海南省| 靖西县| 华坪县| 拉萨市| 冕宁县| 灵山县| 洛阳市| 井冈山市| 南康市| 长兴县| 正蓝旗| 章丘市| 阿瓦提县| 新竹县| 兴业县| 康平县| 清涧县| 嘉鱼县| 包头市| 兴海县| 左云县| 叙永县| 洮南市| 色达县| 金湖县| 于田县| 含山县| 中卫市| 安达市| 和政县| 高淳县| 龙州县| 定边县| 安国市|