您好,登錄后才能下訂單哦!
這篇文章主要介紹了Spring MVC圖片的上傳和下載功能怎么實現的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Spring MVC圖片的上傳和下載功能怎么實現文章都會有所收獲,下面我們一起來看看吧。
SSM 框架是一種基于Java的Web開發框架,其中Spring作為控制層、SpringMVC作為視圖層、MyBatis作為持久層,這個框架非常適合Web應用程序的開發。在這篇文章中,我們將使用 SSM 框架來實現圖片的上傳和下載功能。
首先,我們需要準備好一個基本的SSM框架環境,也就是需要一個Tomcat服務器、Spring、SpringMVC和MyBatis等開發工具。
接著創建一個名為Image的Java類來存儲圖片的信息。該類包含以下字段:id、name、path、size、createTime、type、等。
在控制層中,我們創建一個名為UploadController的類來處理上傳請求。在該類中,我們需要添加一個方法,該方法用于處理上傳請求并返回上傳結果。在該方法中,我們需要使用SpringMVC提供的 MultipartResolver 類來解析上傳的文件,獲取文件信息,并將文件保存到服務器上。以下是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"; } } }
在控制層中,我們創建一個名為DownloadController的類來處理下載請求。在該類中,我們需要添加一個方法,該方法用于處理下載請求并返回下載結果。在該方法中,我們需要使用SpringMVC提供的 ResponseEntity 類來返回文件流并設置相關的頭信息。以下是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) 方法來獲取要下載的圖片的信息,這個方法可以自己實現或借助MyBatis框架讀取數據庫獲取數據。
最后,在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/" />
這樣,我們就完成了圖片上傳和下載的功能實現。通過SSM框架的整合,我們可以很方便地實現文件上傳和下載的功能。
SSM 將圖片添加到數據庫和從數據庫讀取到前端頁面實質上是對數據庫中的二進制數據進行操作,以下是常用的實現方式:
(1)在數據庫中添加一個表,用于存儲圖片數據,表結構如下:
CREATE TABLE tb_image( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主鍵', `name` varchar(255) NOT NULL COMMENT '文件名', `image` longblob NOT NULL COMMENT '圖片數據', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='圖片表';
其中,id為主鍵自增長,name用于存儲文件名,image用于存儲圖片數據。
(2)在 Java 代碼中先讀取圖片數據,然后將其插入到數據庫中,示例代碼如下:
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); // 設置文件名 pstmt.setBinaryStream(2, fis, fis.available()); // 設置圖片數據 pstmt.executeUpdate(); pstmt.close(); } catch (Exception e) { e.printStackTrace(); } }
其中,name為文件名,imagePath為圖片路徑,fis為讀取圖片數據的輸入流,conn為數據庫連接對象。
第二步:從數據庫讀取到前端頁面
(1)在 Java 代碼中從數據庫中讀取圖片數據,示例代碼如下:
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 為圖片在數據庫中的對應主鍵,response 為響應對象,conn 為數據庫連接對象。通過操作 ResultSet 對象可以得到圖片數據的輸入流。
(2)在前端頁面中調用此 Java 方法,將圖片數據顯示在頁面上,示例代碼如下:
<img src="/getImage?id=1" />
其中,getImage 方法的 id 參數表示圖片在數據庫中的主鍵值。在前端頁面中使用 img 標簽,指定 src 屬性為 getImage 方法的 url 地址即可。
關于“Spring MVC圖片的上傳和下載功能怎么實現”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Spring MVC圖片的上傳和下載功能怎么實現”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。