Java中多媒体文件上传及页面回显的操作代码
文件上传页面
<%@pagelanguage="java"contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>Inserttitlehere 实现文件上传
1编辑FileController--只是引入文件上传的示例
packagecom.jt.controller;
importorg.springframework.web.bind.annotation.RequestMapping;
importorg.springframework.web.bind.annotation.RestController;
importorg.springframework.web.multipart.MultipartFile;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
@RestController
publicclassFileController{
/**
*MultipartFile接口作用主要就是优化了文件上传API集合
*1.文件上传位置???D:\JT-SOFT\images
*2.判断一下文件目录是否存在
*3.利用API实现文件上传.
*/
@RequestMapping("/file")
publicStringfile(MultipartFilefileImage){
StringfileDir="D:/JT-SOFT/images";
Filefile=newFile(fileDir);
if(!file.exists()){//文件不存在则创建文件
file.mkdirs();//一次性创建多级目录
}
//文件信息=文件名+文件后缀----这里开始真正的利用多媒体文件MultipartFile类型的API-getOriginalFilename获取多媒体文件的全称
StringfileName=fileImage.getOriginalFilename();
//将文件的整体封装为对象文件路径/文件名称
FileimageFile=newFile(fileDir+"/"+fileName);
//实现文件上传,将文件字节数组传输到指定的位置.-另一个多媒体文件的API-transferTo上传多媒体文件到本地磁盘位置并保存
try{
fileImage.transferTo(imageFile);
}catch(IOExceptione){
e.printStackTrace();
}
return"文件上传成功!!!!";
}
}
真正项目上的文件上传操作
1封装VO对象
{“error”:0,“url”:“图片的保存路径”,“width”:图片的宽度,“height”:图片的高度}
说明:
error:代表文件上传的错误.0文件上传正确1.文件上传失败.
url地址:访问图片的网络地址…用户通过url地址获取图片信息--与真实物理地址之间经过nginx反向代理实现
访问图片的物理地址…真实存储的地址D:/a/a.jpg
width/height:宽度和高度是图片的特有属性…判断是否为图片的依据
packagecom.jt.vo;
importlombok.AllArgsConstructor;
importlombok.Data;
importlombok.NoArgsConstructor;
importlombok.experimental.Accessors;
importjava.io.Serializable;
@Data
@Accessors(chain=true)
@NoArgsConstructor
@AllArgsConstructor
publicclassImageVOimplementsSerializable{
//{"error":0,"url":"图片的保存路径","width":图片的宽度,"height":图片的高度}
privateIntegererror;
privateStringurl;//图片虚拟访问路径
privateIntegerwidth;//宽度
privateIntegerheight;//高度
//successfail
publicstaticImageVOfail(){
returnnewImageVO(1,null,null,null);
}
publicstaticImageVOsuccess(Stringurl,Integerwidth,Integerheight){
returnnewImageVO(0,url,width,height);
}
}
2文件上传页面url分析
参数说明
jsp页面需要/或者提供了哪个参数就后端开发就要提供/或者接收那个参数,参数名称必须一致,否则页面解析不了/或后端参数/对象接收不到!!
3编辑配置文件image.properties--为了将来实现项目的扩展性,将核心的配置写入该配置文件中
#properties的作用就是封装key=value业务数据 image.dirPath=D:/JT-SOFT/images image.urlPath=http://image.jt.com #这里写域名是为了客户端访问方便的,经过nginx反向代理服务器后实际链接到服务器本地磁盘上的物理路径
3.编辑FileController
packagecom.jt.controller;
//导的包就不写了,idea自动导去吧
@RestController
publicclassFileController{
/**
*业务:实现商品的文件上传操作
*url地址:http://localhost:8091/pic/upload?dir=image
*参数:uploadFile注意字母的大小写
*返回值结果:ImageVO对象.
*/
@Autowired
privateFileServicefileService;
@RequestMapping("/pic/upload")
publicImageVOupload(MultipartFileuploadFile){
//将所有的业务操作,放到Service层中完成!!!
returnfileService.upload(uploadFile);
}
}
4编辑FileService
packagecom.jt.service;
@Service
@PropertySource("classpath:/properties/image.properties")
publicclassFileServiceImplimplementsFileService{
@Value("${image.dirPath}")
privateStringdirPath;
@Value("${image.urlPath}")
privateStringurlPath;
//为了防止Set集合每次都要创建,则通过static代码块的形式负责封装数据
privatestaticSetimageSet=newHashSet<>();
static{
imageSet.add(".jpg");
imageSet.add(".png");
imageSet.add(".gif");
//....
}
/**
*文件上传具体步骤:
*1.如何校验用户上传的是图片?jpg|png
*2.如何访问用户上传恶意程序木马.exe.jpg宽度*高度
*3.应该采用分目录存储的方式保存数据
*4.上传的文件名称应该尽量避免重名自定义文件名称...UUID.后缀...
*/
@Override
publicImageVOupload(MultipartFileuploadFile){
//1.校验图片类型是否正确jpg|png|gifxxxx1.正则表达式判断2.准备集合之后进行校验Set<去重>
//1.1获取上传的图片类型ABC.JPG
StringfileName=uploadFile.getOriginalFilename();//文件的全名abc.jpg
fileName=fileName.toLowerCase();//将所有的字符转化为小写
intindex=fileName.lastIndexOf(".");
StringfileType=fileName.substring(index);//含头不含尾即从点处开始切割字符串,没有声明截止位置默认为最后了.
//1.2判断是否为图片类型bug-图片类型大小写这里判断不了一致的,所以获取到多媒体文件的全称后直接全部转化为小写!!
if(!imageSet.contains(fileType)){
//用户上传的不是图片
returnImageVO.fail();
}
//2.上传的数据是否为恶意程序.高度和宽度是否为null.利用图片API
//BufferedImage对象专门负责封装图片--利用图片IO对象ImageIO的API-read方法获取到该多媒体文件的字节流封装为BufferedImage对象--因为它上面有API获取文件的宽和高
try{
BufferedImagebufferedImage=ImageIO.read(uploadFile.getInputStream());
intwidth=bufferedImage.getWidth();
intheight=bufferedImage.getHeight();
if(width==0||height==0){
returnImageVO.fail();
}
//=======以上仅为判断客户端传来的多媒体文件是否为图片,下面才是真正的图片存入本地磁盘操作=========
//3.采用分目录存储的方式--第三步只是为了创建存储图片的磁盘目录
//StringdirPath="D:/JT-SOFT/images";//动态获取
//3.1分目录存储方式1hash方式ACBBCDD
//3.1分目录存储方式2时间方式存储yyyy/MM/dd--注意声明时间格式时前后都要加斜杠,因为这是文件夹目录
StringdateDir=newSimpleDateFormat("/yyyy/MM/dd/").format(newDate());
//3.2准备文件存储的目录
StringimageDir=dirPath+dateDir;
FileimageFileDir=newFile(imageDir);
if(!imageFileDir.exists()){
imageFileDir.mkdirs();
}
//4实现文件上传--优先防止存储文件重名UUID生成文件名称
//4.1动态拼接文件名称f3aa1378-ece6-11ea-98c9-00d861eaf238
//UUID.randomUUID()生成的是一串带有短横杠的16进制数字,转化为字符串是方便用字符串的API-replace替换掉(删减)其中的短横杠
Stringuuid=UUID.randomUUID().toString().replace("-","");
//uuid.后缀
StringrealFileName=uuid+fileType;
//4.2准备文件上传的全路径磁盘路径地址+文件名称
FileimageFile=newFile(imageDir+realFileName);
//4.3实现文件上传
uploadFile.transferTo(imageFile);
//=====以上已经将多媒体文件存入服务器磁盘了!!下面是将本地磁盘路径转化为url路径方便客户端的访问=====
//5.动态生成URL地址
//请求协议:http://https://带证书的网址安全性更高公钥私钥进行加密解密.
//向服务器运行商购买域名comcnorghosts文件
//图片存储的虚拟地址的路径动态变化的路径
//http://image.jt.com/2020/09/02/uuid.jpg
Stringurl=urlPath+dateDir+realFileName;
returnImageVO.success(url,width,height);
}catch(IOExceptione){
e.printStackTrace();
returnImageVO.fail();
}
}
}
下一个博客专门写nginx反向代理服务器的安装及使用!!
到此这篇关于Java中多媒体文件上传及页面回显的操作代码的文章就介绍到这了,更多相关Java文件上传页面回显内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。