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

Java中多媒體文件上傳及頁面回顯的操作代碼

 更新時間:2020年09月14日 10:10:47   作者:BShu666  
這篇文章主要介紹了Java中多媒體文件上傳及頁面回顯的操作代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

文件上傳頁面

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>實(shí)現(xiàn)文件上傳</h1>
	<!--enctype="開啟多媒體標(biāo)簽" -這一個屬性就開啟了多媒體文件的上傳!! -->
	<form action="http://localhost:8091/file" method="post" 
	enctype="multipart/form-data">
		<input name="fileImage" type="file" />
		<input type="submit" value="提交"/>
	</form>
</body>
</html>

1 編輯FileController --只是引入文件上傳的示例

package com.jt.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

@RestController
public class FileController {

 /**
 * MultipartFile 接口作用 主要就是優(yōu)化了文件上傳 API集合
 * 1. 文件上傳位置??? D:\JT-SOFT\images
 * 2. 判斷一下文件目錄是否存在
 * 3. 利用API實(shí)現(xiàn)文件上傳.
 */
 @RequestMapping("/file")
 public String file(MultipartFile fileImage){
 String fileDir = "D:/JT-SOFT/images";
 File file = new File(fileDir);
 if(!file.exists()){ //文件不存在則創(chuàng)建文件

  file.mkdirs(); //一次性創(chuàng)建多級目錄
 }
 //文件信息 = 文件名+文件后綴 ----這里開始真正的利用多媒體文件MultipartFile類型的API-getOriginalFilename獲取多媒體文件的全稱
 String fileName = fileImage.getOriginalFilename();
 //將文件的整體封裝為對象 文件路徑/文件名稱
 File imageFile = new File(fileDir+"/"+fileName);
 //實(shí)現(xiàn)文件上傳,將文件字節(jié)數(shù)組傳輸?shù)街付ǖ奈恢? -另一個多媒體文件的API - transferTo上傳多媒體文件到本地磁盤位置并保存
 try { 
  fileImage.transferTo(imageFile);
 } catch (IOException e) {
  e.printStackTrace();
 }
 return "文件上傳成功!!!!";
 }
}

真正項目上的文件上傳操作

1 封裝VO對象
{“error”:0,“url”:“圖片的保存路徑”,“width”:圖片的寬度,“height”:圖片的高度}
說明:
error: 代表文件上傳的錯誤. 0 文件上傳正確 1.文件上傳失敗.
url地址: 訪問圖片的網(wǎng)絡(luò)地址… 用戶通過url地址獲取圖片信息 --與真實(shí)物理地址之間經(jīng)過nginx反向代理實(shí)現(xiàn)
訪問圖片的物理地址… 真實(shí)存儲的地址 D:/a/a.jpg
width/height: 寬度和高度是圖片的特有屬性…判斷是否為圖片的依據(jù)

package com.jt.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

@Data
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class ImageVO implements Serializable {
 //{"error":0,"url":"圖片的保存路徑","width":圖片的寬度,"height":圖片的高度}
 private Integer error;
 private String url; //圖片虛擬訪問路徑
 private Integer width; //寬度
 private Integer height; //高度

 //success fail
 public static ImageVO fail(){
 return new ImageVO(1,null,null,null);
 }
 
 public static ImageVO success(String url,Integer width,Integer height){
 return new ImageVO(0, url, width, height);
 }
}

2 文件上傳頁面url分析

在這里插入圖片描述

參數(shù)說明

在這里插入圖片描述

jsp頁面需要/或者提供了哪個參數(shù)就后端開發(fā)就要提供/或者接收那個參數(shù),參數(shù)名稱必須一致,否則頁面解析不了/或后端參數(shù)/對象接收不到!!
3 編輯配置文件image.properties --為了將來實(shí)現(xiàn)項目的擴(kuò)展性,將核心的配置寫入該配置文件中

#properties的作用就是封裝key=value 業(yè)務(wù)數(shù)據(jù)
image.dirPath=D:/JT-SOFT/images
image.urlPath=http://image.jt.com
#這里寫域名是為了客戶端訪問方便的,經(jīng)過nginx反向代理服務(wù)器后實(shí)際鏈接到服務(wù)器本地磁盤上的物理路徑

3.編輯FileController

 package com.jt.controller;
//導(dǎo)的包就不寫了,idea自動導(dǎo)去吧
@RestController
public class FileController {
/**
 * 業(yè)務(wù):實(shí)現(xiàn)商品的文件上傳操作
 * url地址: http://localhost:8091/pic/upload?dir=image
 * 參數(shù): uploadFile 注意字母的大小寫
 * 返回值結(jié)果: ImageVO對象.
 */
 @Autowired
 private FileService fileService;

 @RequestMapping("/pic/upload")
 public ImageVO upload(MultipartFile uploadFile){
 //將所有的業(yè)務(wù)操作,放到Service層中完成!!!
 return fileService.upload(uploadFile);
 }
}

4編輯FileService

package com.jt.service;
@Service
@PropertySource("classpath:/properties/image.properties")
public class FileServiceImpl implements FileService{

 @Value("${image.dirPath}")
 private String dirPath;
 @Value("${image.urlPath}")
 private String urlPath;

 //為了防止Set集合每次都要創(chuàng)建,則通過static代碼塊的形式負(fù)責(zé)封裝數(shù)據(jù)
 private static Set<String> imageSet = new HashSet<>();

 static {
 imageSet.add(".jpg");
 imageSet.add(".png");
 imageSet.add(".gif");
 //....
 }
 /**
 * 文件上傳具體步驟:
 * 1.如何校驗(yàn)用戶上傳的是圖片? jpg|png
 * 2.如何訪問用戶上傳惡意程序 木馬.exe.jpg 寬度*高度
 * 3.應(yīng)該采用分目錄存儲的方式 保存數(shù)據(jù)
 * 4.上傳的文件名稱應(yīng)該盡量避免重名 自定義文件名稱... UUID.后綴...
 */
 @Override
 public ImageVO upload(MultipartFile uploadFile) {
 //1.校驗(yàn)圖片類型是否正確 jpg|png|gifxxxx 1.正則表達(dá)式判斷 2.準(zhǔn)備集合之后進(jìn)行校驗(yàn)Set<去重>
 //1.1 獲取上傳的圖片類型 ABC.JPG
 String fileName = uploadFile.getOriginalFilename(); //文件的全名 abc.jpg
 fileName = fileName.toLowerCase();   //將所有的字符轉(zhuǎn)化為小寫
 int index = fileName.lastIndexOf(".");
 String fileType = fileName.substring(index); //含頭不含尾即從點(diǎn)處開始切割字符串,沒有聲明截止位置默認(rèn)為最后了.
 //1.2判斷是否為圖片類型 bug-圖片類型大小寫這里判斷不了一致的,所以獲取到多媒體文件的全稱后直接全部轉(zhuǎn)化為小寫!!
 if(!imageSet.contains(fileType)){
  //用戶上傳的不是圖片
  return ImageVO.fail();
 }
//2.上傳的數(shù)據(jù)是否為惡意程序. 高度和寬度是否為null. 利用圖片API
 //BufferedImage對象 專門負(fù)責(zé)封裝圖片 --利用圖片IO對象ImageIO的API-read方法獲取到該多媒體文件的字節(jié)流封裝為BufferedImage對象 --因?yàn)樗厦嬗蠥PI獲取文件的寬和高
 try {
  BufferedImage bufferedImage = ImageIO.read(uploadFile.getInputStream());
  int width = bufferedImage.getWidth();
  int height = bufferedImage.getHeight();
  if(width==0 || height ==0){
  return ImageVO.fail();
  }
//=======以上僅為判斷客戶端傳來的多媒體文件是否為圖片,下面才是真正的圖片存入本地磁盤操作=========
  //3.采用分目錄存儲的方式 --第三步只是為了創(chuàng)建存儲圖片的磁盤目錄
  //String dirPath = "D:/JT-SOFT/images"; //動態(tài)獲取
  //3.1 分目錄存儲方式1 hash方式 ACBBCDD
  //3.1 分目錄存儲方式2 時間方式存儲 yyyy/MM/dd --注意聲明時間格式時前后都要加斜杠,因?yàn)檫@是文件夾目錄
  String dateDir = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
  //3.2 準(zhǔn)備文件存儲的目錄
  String imageDir = dirPath + dateDir;
  File imageFileDir = new File(imageDir);
  if(!imageFileDir.exists()){
  imageFileDir.mkdirs();
  }
 //4 實(shí)現(xiàn)文件上傳 --優(yōu)先防止存儲文件重名UUID生成文件名稱
  //4.1 動態(tài)拼接文件名稱 f3aa1378-ece6-11ea-98c9-00d861eaf238
  //UUID.randomUUID()生成的是一串帶有短橫杠的16進(jìn)制數(shù)字,轉(zhuǎn)化為字符串是方便用字符串的API-replace替換掉(刪減)其中的短橫杠
  String uuid = UUID.randomUUID().toString().replace("-", "");
  // uuid.后綴 
  String realFileName = uuid + fileType;
  //4.2 準(zhǔn)備文件上傳的全路徑 磁盤路徑地址+文件名稱
  File imageFile = new File(imageDir+realFileName);
  //4.3 實(shí)現(xiàn)文件上傳
  uploadFile.transferTo(imageFile);
//=====以上已經(jīng)將多媒體文件存入服務(wù)器磁盤了!!下面是將本地磁盤路徑轉(zhuǎn)化為url路徑方便客戶端的訪問=====
  //5.動態(tài)生成URL地址
  //請求協(xié)議: http:// https:// 帶證書的網(wǎng)址 安全性更高 公鑰私鑰進(jìn)行加密解密.
  //向服務(wù)器運(yùn)行商購買域名 com cn org hosts文件
  //圖片存儲的虛擬地址的路徑 動態(tài)變化的路徑
  //http://image.jt.com/2020/09/02/uuid.jpg
  String url = urlPath+dateDir+realFileName;
  return ImageVO.success(url,width,height);
 } catch (IOException e) {
  e.printStackTrace();
  return ImageVO.fail();
 }
 }
} 

下一個博客專門寫nginx反向代理服務(wù)器的安裝及使用!!

到此這篇關(guān)于Java中多媒體文件上傳及頁面回顯的操作代碼的文章就介紹到這了,更多相關(guān)Java文件上傳頁面回顯內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合PageHelper實(shí)現(xiàn)分頁查詢功能詳解

    SpringBoot整合PageHelper實(shí)現(xiàn)分頁查詢功能詳解

    PageHelper是mybatis框架的一個插件,用于支持在mybatis執(zhí)行分頁操作。本文將通過SpringBoot整合PageHelper實(shí)現(xiàn)分頁查詢功能,需要的可以參考一下
    2022-03-03
  • 使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決

    使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決

    這篇文章主要介紹了使用Feign遠(yuǎn)程調(diào)用時,序列化對象失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java銀行管理系統(tǒng)源碼

    java銀行管理系統(tǒng)源碼

    這篇文章主要為大家詳細(xì)介紹了java銀行管理系統(tǒng)源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Java基于logback?MessageConverter實(shí)現(xiàn)日志脫敏方案分析

    Java基于logback?MessageConverter實(shí)現(xiàn)日志脫敏方案分析

    本文介紹了一種日志脫敏方案,即基于logbackMessageConverter和正則匹配的方法,該方法的優(yōu)點(diǎn)是侵入性低,工作量少,只需修改xml配置文件,適用于老項目,感興趣的朋友跟隨小編一起看看吧
    2024-10-10
  • 解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)

    解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn)

    這篇文章主要介紹了解析SpringSecurity+JWT認(rèn)證流程實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • Java實(shí)現(xiàn)的RSA加密解密算法示例

    Java實(shí)現(xiàn)的RSA加密解密算法示例

    這篇文章主要介紹了Java實(shí)現(xiàn)的RSA加密解密算法,結(jié)合實(shí)例形式分析了java RAS加密解密算法的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01
  • 詳解springboot和vue前后端分離開發(fā)跨域登陸問題

    詳解springboot和vue前后端分離開發(fā)跨域登陸問題

    這篇文章主要介紹了詳解springboot和vue前后端分離開發(fā)跨域登陸問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • 一次因Java應(yīng)用造成CPU過高的排查實(shí)踐過程

    一次因Java應(yīng)用造成CPU過高的排查實(shí)踐過程

    一個應(yīng)用占用CPU很高,除了確實(shí)是計算密集型應(yīng)用之外,通常原因都是出現(xiàn)了死循環(huán)。下面這篇文章主要給大家介紹了一次因Java應(yīng)用造成CPU過高的排查實(shí)踐過程,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • java根據(jù)本地IP獲取mac地址的方法

    java根據(jù)本地IP獲取mac地址的方法

    這篇文章主要為大家詳細(xì)介紹了java根據(jù)本地IP獲取mac地址的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java中的LinkedHashMap源碼詳解

    Java中的LinkedHashMap源碼詳解

    這篇文章主要介紹了Java中的LinkedHashMap源碼詳解,LinkedHashMap的實(shí)現(xiàn)方式是將所有的Entry節(jié)點(diǎn)鏈入一個雙向鏈表,并且它的底層數(shù)據(jù)結(jié)構(gòu)是HashMap,因此,LinkedHashMap具有HashMap的所有特性,但在存取元素的細(xì)節(jié)實(shí)現(xiàn)上有所不同,需要的朋友可以參考下
    2023-09-09

最新評論

光山县| 马尔康县| 黎城县| 桐梓县| 河西区| 波密县| 北辰区| 海淀区| 望江县| 新余市| 河源市| 南投县| 五家渠市| 霍城县| 青铜峡市| 策勒县| 新密市| 洛阳市| 星座| 东乡族自治县| 白城市| 阜新市| 峨山| 亚东县| 梅州市| 象州县| 滁州市| 遵义市| 河间市| 天峨县| 敦化市| 蓝田县| 民权县| 邯郸县| 修武县| 缙云县| 隆林| 蕉岭县| 湟中县| 河北区| 吉水县|