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

Spring MVC 圖片的上傳和下載功能

 更新時間:2023年03月20日 09:40:31   作者:Java Fans  
SSM 框架是一種基于Java的Web開發(fā)框架,其中Spring作為控制層、SpringMVC作為視圖層、MyBatis作為持久層,這個框架非常適合Web應(yīng)用程序的開發(fā),這篇文章主要介紹了Spring MVC 圖片的上傳和下載功能,需要的朋友可以參考下

序言

  SSM 框架是一種基于Java的Web開發(fā)框架,其中Spring作為控制層、SpringMVC作為視圖層、MyBatis作為持久層,這個框架非常適合Web應(yīng)用程序的開發(fā)。在這篇文章中,我們將使用 SSM 框架來實(shí)現(xiàn)圖片的上傳和下載功能。

  首先,我們需要準(zhǔn)備好一個基本的SSM框架環(huán)境,也就是需要一個Tomcat服務(wù)器、Spring、SpringMVC和MyBatis等開發(fā)工具。

  接著創(chuàng)建一個名為Image的Java類來存儲圖片的信息。該類包含以下字段:id、name、path、size、createTime、type、等。

思路一:瀏覽器圖片的上傳下載顯示通過本地實(shí)現(xiàn)

  下面我們來實(shí)現(xiàn)具體的功能:

1、圖片上傳功能

  在控制層中,我們創(chuàng)建一個名為UploadController的類來處理上傳請求。在該類中,我們需要添加一個方法,該方法用于處理上傳請求并返回上傳結(jié)果。在該方法中,我們需要使用SpringMVC提供的 MultipartResolver 類來解析上傳的文件,獲取文件信息,并將文件保存到服務(wù)器上。以下是UploadController類中的代碼:

@Controller
@RequestMapping("/upload")
public class UploadController {

    @RequestMapping(value = "/image", method = RequestMethod.POST)
    @ResponseBody
    public String uploadImage(@RequestParam("file") MultipartFile file) {
        String fileName = file.getOriginalFilename();
        String path = "D:/uploads/" + fileName;
        try {
            File dest = new File(path);
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdirs();
            }
            file.transferTo(dest);
            return "success";
        } catch (Exception e) {
            e.printStackTrace();
            return "error";
        }
    }
}

2、圖片下載功能

  在控制層中,我們創(chuàng)建一個名為DownloadController的類來處理下載請求。在該類中,我們需要添加一個方法,該方法用于處理下載請求并返回下載結(jié)果。在該方法中,我們需要使用SpringMVC提供的 ResponseEntity 類來返回文件流并設(shè)置相關(guān)的頭信息。以下是DownloadController類中的代碼:

@Controller
@RequestMapping("/download")
public class DownloadController {

    @RequestMapping(value = "/image/{id}", method = RequestMethod.GET)
    public ResponseEntity<byte[]> downloadImage(@PathVariable("id") int id) {
        Image image = imageService.getImageById(id);
        String fileName = image.getName();
        String path = "D:/uploads/" + fileName;
        try {
            HttpHeaders headers = new HttpHeaders();
            headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            headers.setContentDispositionFormData("attachment", fileName);
            File file = new File(path);
            return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

  以上代碼中,我們使用了 imageService.getImageById(id) 方法來獲取要下載的圖片的信息,這個方法可以自己實(shí)現(xiàn)或借助MyBatis框架讀取數(shù)據(jù)庫獲取數(shù)據(jù)。

  最后,在SpringMVC的配置文件spring-servlet.xml中,添加以下配置信息,以支持文件上傳和下載功能:

<!-- 文件上傳配置 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="maxUploadSize" value="10485760" />
</bean>

<!-- 文件下載配置 -->
<mvc:resources mapping="/download/**" location="file:/D:/uploads/" />

  這樣,我們就完成了圖片上傳和下載的功能實(shí)現(xiàn)。通過SSM框架的整合,我們可以很方便地實(shí)現(xiàn)文件上傳和下載的功能。

思路二:瀏覽器圖片的上傳下載顯示通過數(shù)據(jù)庫實(shí)現(xiàn)

  SSM 將圖片添加到數(shù)據(jù)庫和從數(shù)據(jù)庫讀取到前端頁面實(shí)質(zhì)上是對數(shù)據(jù)庫中的二進(jìn)制數(shù)據(jù)進(jìn)行操作,以下是常用的實(shí)現(xiàn)方式:

1、將圖片添加到數(shù)據(jù)庫

  (1)在數(shù)據(jù)庫中添加一個表,用于存儲圖片數(shù)據(jù),表結(jié)構(gòu)如下:

CREATE TABLE tb_image(
    `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
    `name` varchar(255) NOT NULL COMMENT '文件名',
    `image` longblob NOT NULL COMMENT '圖片數(shù)據(jù)',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='圖片表';

  其中,id為主鍵自增長,name用于存儲文件名,image用于存儲圖片數(shù)據(jù)。

  (2)在 Java 代碼中先讀取圖片數(shù)據(jù),然后將其插入到數(shù)據(jù)庫中,示例代碼如下:

public void addImage(String name, String imagePath) {
    try {
        FileInputStream fis = new FileInputStream(imagePath);
        PreparedStatement pstmt = conn.prepareStatement("INSERT INTO tb_image(name,image) VALUES(?,?)");
        pstmt.setString(1, name);  // 設(shè)置文件名
        pstmt.setBinaryStream(2, fis, fis.available());  // 設(shè)置圖片數(shù)據(jù)
        pstmt.executeUpdate();
        pstmt.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

  其中,name為文件名,imagePath為圖片路徑,fis為讀取圖片數(shù)據(jù)的輸入流,conn為數(shù)據(jù)庫連接對象。

第二步:從數(shù)據(jù)庫讀取到前端頁面

  (1)在 Java 代碼中從數(shù)據(jù)庫中讀取圖片數(shù)據(jù),示例代碼如下:

public void getImage(int id, HttpServletResponse response) {
    try {
        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM tb_image WHERE id=?");
        pstmt.setInt(1, id);
        ResultSet rs = pstmt.executeQuery();
        if (rs.next()) {
            String name = rs.getString("name");
            Blob imageBlob = rs.getBlob("image");
            InputStream is = imageBlob.getBinaryStream();
            ServletOutputStream out = response.getOutputStream();
            response.setContentType("image/jpeg");
            response.setHeader("Content-Disposition", "attachment;filename=" + name);
            byte[] b = new byte[1024];
            int len;
            while ((len = is.read(b)) > 0) {
                out.write(b, 0, len);
            }
            is.close();
            out.flush();
            out.close();
        }
        rs.close();
        pstmt.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

  其中,id 為圖片在數(shù)據(jù)庫中的對應(yīng)主鍵,response 為響應(yīng)對象,conn 為數(shù)據(jù)庫連接對象。通過操作 ResultSet 對象可以得到圖片數(shù)據(jù)的輸入流。

  (2)在前端頁面中調(diào)用此 Java 方法,將圖片數(shù)據(jù)顯示在頁面上,示例代碼如下:

<img src="/getImage?id=1" />

  其中,getImage 方法的 id 參數(shù)表示圖片在數(shù)據(jù)庫中的主鍵值。在前端頁面中使用 img 標(biāo)簽,指定 src 屬性為 getImage 方法的 url 地址即可

到此這篇關(guān)于Spring MVC 圖片的上傳和下載的文章就介紹到這了,更多相關(guān)Spring MVC 圖片上傳下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java開源診斷工具Arthas使用方法詳解

    Java開源診斷工具Arthas使用方法詳解

    這篇文章主要介紹了Java開源診斷工具Arthas使用方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • IDEA集成git和使用步驟的實(shí)現(xiàn)方法

    IDEA集成git和使用步驟的實(shí)現(xiàn)方法

    這篇文章主要介紹了IDEA集成git和使用步驟的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案

    Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案

    這篇文章主要介紹了Spring Security和自定義filter的沖突導(dǎo)致多執(zhí)行的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java判斷絕對值的方法總結(jié)

    Java判斷絕對值的方法總結(jié)

    在本文中作者為大家分享了兩種Java判斷絕對值的方法,對此有興趣的朋友可以和小編一起學(xué)習(xí)下。
    2018-02-02
  • Java錯誤org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.sjks.mapper.Use

    Java錯誤org.apache.ibatis.binding.BindingException: Inval

    本文主要介紹了Java錯誤org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.sjks.mapper.Use,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring Boot結(jié)成MyBatis-Plus最全配置指南

    Spring Boot結(jié)成MyBatis-Plus最全配置指南

    本文主要介紹了Spring Boot結(jié)成MyBatis-Plus最全配置指南,包括依賴引入、配置數(shù)據(jù)源、Mapper 掃描、基本CRUD操作等,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • 編寫Java代碼對HDFS進(jìn)行增刪改查操作代碼實(shí)例

    編寫Java代碼對HDFS進(jìn)行增刪改查操作代碼實(shí)例

    這篇文章主要介紹了Java代碼對HDFS進(jìn)行增刪改查操作,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • IntellJ IDEA JAVA代碼任務(wù)標(biāo)記實(shí)例解析

    IntellJ IDEA JAVA代碼任務(wù)標(biāo)記實(shí)例解析

    這篇文章主要介紹了IntellJ IDEA JAVA代碼任務(wù)標(biāo)記實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Mybatis之@ResultMap,@Results,@Result注解的使用

    Mybatis之@ResultMap,@Results,@Result注解的使用

    這篇文章主要介紹了Mybatis之@ResultMap,@Results,@Result注解的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java Stream流之求和的實(shí)現(xiàn)

    Java Stream流之求和的實(shí)現(xiàn)

    這篇文章主要介紹了Java Stream流之求和的實(shí)現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論

岳阳县| 麻栗坡县| 宿松县| 合江县| 天气| 台中市| 河津市| 裕民县| 汨罗市| 定安县| 灵宝市| 浙江省| 浮山县| 潮州市| 厦门市| 佛坪县| 迁安市| 蒙阴县| 六枝特区| 绥宁县| 彭泽县| 花莲县| 偃师市| 礼泉县| 临邑县| 古浪县| 偏关县| 左云县| 承德市| 佛学| 沂南县| 宽城| 顺昌县| 新干县| 乌鲁木齐市| 开平市| 堆龙德庆县| 黔西县| 大竹县| 青阳县| 滦南县|