欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

序言

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

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

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

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

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

1、圖片上傳功能

  在控制層中,我們創(chuàng)建一個(gè)名為UploadController的類來處理上傳請(qǐng)求。在該類中,我們需要添加一個(gè)方法,該方法用于處理上傳請(qǐng)求并返回上傳結(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)建一個(gè)名為DownloadController的類來處理下載請(qǐng)求。在該類中,我們需要添加一個(gè)方法,該方法用于處理下載請(qǐng)求并返回下載結(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) 方法來獲取要下載的圖片的信息,這個(gè)方法可以自己實(shí)現(xiàn)或借助MyBatis框架讀取數(shù)據(jù)庫(kù)獲取數(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ù)庫(kù)實(shí)現(xiàn)

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

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

  (1)在數(shù)據(jù)庫(kù)中添加一個(gè)表,用于存儲(chǔ)圖片數(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為主鍵自增長(zhǎng),name用于存儲(chǔ)文件名,image用于存儲(chǔ)圖片數(shù)據(jù)。

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

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ù)庫(kù)連接對(duì)象。

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

  (1)在 Java 代碼中從數(shù)據(jù)庫(kù)中讀取圖片數(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ù)庫(kù)中的對(duì)應(yīng)主鍵,response 為響應(yīng)對(duì)象,conn 為數(shù)據(jù)庫(kù)連接對(duì)象。通過操作 ResultSet 對(duì)象可以得到圖片數(shù)據(jù)的輸入流。

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

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

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

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

相關(guān)文章

  • Java Spring注解之@Async的基本用法和示例

    Java Spring注解之@Async的基本用法和示例

    Spring為任務(wù)調(diào)度與異步方法執(zhí)行提供了注解支持,通過在方法上設(shè)置@Async注解,可使得方法被異步調(diào)用,下面這篇文章主要給大家介紹了關(guān)于Java Spring注解之@Async的基本用法和示例,需要的朋友可以參考下
    2022-03-03
  • Mybatis實(shí)現(xiàn)動(dòng)態(tài)建表代碼實(shí)例

    Mybatis實(shí)現(xiàn)動(dòng)態(tài)建表代碼實(shí)例

    這篇文章主要介紹了Mybatis實(shí)現(xiàn)動(dòng)態(tài)建表代碼實(shí)例,解釋一下,就是指根據(jù)傳入的表名,動(dòng)態(tài)地創(chuàng)建數(shù)據(jù)庫(kù)表,以供后面的業(yè)務(wù)場(chǎng)景使用,
    而使用 Mybatis 的動(dòng)態(tài) SQL,就能很好地為我們解決這個(gè)問題,需要的朋友可以參考下
    2023-10-10
  • Java Spring-Cache key配置注意事項(xiàng)介紹

    Java Spring-Cache key配置注意事項(xiàng)介紹

    本文主要對(duì)java spring-cache key配置注意事項(xiàng)進(jìn)行了介紹,小編覺得還是挺不錯(cuò)的,這里分享給大家,供需要的朋友參考。
    2017-10-10
  • SpringMVC 限流的示例代碼

    SpringMVC 限流的示例代碼

    這篇文章主要介紹了SpringMVC 限流的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • JAVA SFTP文件上傳、下載及批量下載實(shí)例

    JAVA SFTP文件上傳、下載及批量下載實(shí)例

    本篇文章主要介紹了JAVA SFTP文件上傳、下載及批量下載實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • JavaEE線程安全定時(shí)器模式任務(wù)

    JavaEE線程安全定時(shí)器模式任務(wù)

    這篇文章主要介紹了JavaEE線程安全定時(shí)器模式任務(wù),定時(shí)器模式像是一個(gè)鬧鐘定時(shí),在一定時(shí)間之后被喚醒并執(zhí)行某個(gè)之前設(shè)定好的任務(wù),感興趣的小伙伴可以參考一下
    2022-06-06
  • SpringBoot SSE服務(wù)端主動(dòng)推送事件的實(shí)現(xiàn)

    SpringBoot SSE服務(wù)端主動(dòng)推送事件的實(shí)現(xiàn)

    本文主要介紹了SpringBoot SSE服務(wù)端主動(dòng)推送事件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Spring聲明式事務(wù)@Transactional知識(shí)點(diǎn)分享

    Spring聲明式事務(wù)@Transactional知識(shí)點(diǎn)分享

    在本篇文章里小編給大家整理了關(guān)于Spring聲明式事務(wù)@Transactional詳解內(nèi)容,需要的朋友們可以參考下。
    2020-02-02
  • java項(xiàng)目怎么集成stable diffusion圖文生成算法

    java項(xiàng)目怎么集成stable diffusion圖文生成算法

    在開發(fā)Java項(xiàng)目過程中,我們經(jīng)常需要使用消息傳遞來實(shí)現(xiàn)不同組件之間的通信,Stable Diffusion是一種基于消息傳遞的實(shí)時(shí)通信解決方案,使用Java調(diào)用外部服務(wù)(如Python腳本或API服務(wù)),這些服務(wù)運(yùn)行Stable Diffusion模型,本文將介紹如何將Stable Diffusion集成到Java項(xiàng)目
    2024-07-07
  • Java分支結(jié)構(gòu)程序設(shè)計(jì)實(shí)例詳解

    Java分支結(jié)構(gòu)程序設(shè)計(jì)實(shí)例詳解

    這篇文章主要介紹了Java分支結(jié)構(gòu)程序設(shè)計(jì)例題,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01

最新評(píng)論