1.Window与Linux系统的链接问题
- 检查虚拟机的网段
- 检查windowsIP地址
- 检查Linux IP 192.168.126.129
- 检查是否可以正常通信
- 如果上述操作都对 但是还是不能正常链接 点击恢复默认设置.之后重新配置
2 .文件上传
2.1 编辑ImageVO
@Data
@Accessors(chain = true)
public class ImageVO {
private String virtualPath; //虚拟路径 动态变化的路径
private String urlPath; //网络地址
private String fileName; //图片名称
}
2.2 编辑FileController
/**
* 需求分析: 文件上传完成之后,需要返回ImageVO对象
* @param file
* @return
* @throws IOException
*/
@PostMapping("/upload")
public SysResult upload(MultipartFile file) throws IOException {
ImageVO imageVO = fileService.upload(file);
//不成功 应该返回null
if(imageVO == null){
return SysResult.fail();
}
return SysResult.success(imageVO);
}
2.3 编辑FileServiceImpl
package com.jt.service;
import com.jt.vo.ImageVO;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Service
public class FileServiceImpl implements FileService{
/**
* 规则说明:
* 文件磁盘地址: F:/images/yyyy/MM/dd/uuid.jpg
* 网络访问地址: http://image.jt.com/yyyy/MM/dd/uuid.jpg
*/
private String localDir = "F:/images"; //本地磁盘前缀
private String preURLPath = "http://image.jt.com"; //网络访问域名
/**
* 1.校验文件上传的类型 jpg|png|gif
* 2.应该校验文件是否为恶意程序. 木马.exe.jpg
* 3.为了提高检索效率 应该分目录存储. 1.hash方式 xx/xx/xx/xx 分布不均
* 2.日期格式 yyyy/MM/dd 目录不断增长
* 4.防止文件重名 UUID.jpg
* @param file
* @return
*/
@Override
public ImageVO upload(MultipartFile file) {
//1.图片类型的校验 正则表达式 aaa.jpg
String fileName = file.getOriginalFilename();
//字符大小写 干扰正则的判断 将所有的文件转化为小写字母
fileName = fileName.toLowerCase();
//程序不满足正则, 则用户上传的图片有问题
if(!fileName.matches("^.+\\.(jpg|png|gif)$")){
return null;
}
//2. 校验文件是否为恶意程序 判断依据 属性宽度和高度 aa.exe.jpg
try {
//该对象是用来专门操作图片的API
BufferedImage bufferedImage = ImageIO.read(file.getInputStream());
int height = bufferedImage.getHeight();
int width = bufferedImage.getWidth();
//如果有一项为0 则表示一定不是正经的图片
if(height == 0 || width == 0){
return null;
}
//3.分目录存储文件 /yyyy/MM/dd
//3.1 准备文件根目录
String dateDir = new SimpleDateFormat("/yyyy/MM/dd/").format(new Date());
//拼接文件目录 F:/images/2021/MM/dd/
String dirPath = localDir + dateDir;
File dirFile = new File(dirPath);
//3.2 判断是否需要创建目录
if(!dirFile.exists()){ //不存在目录时,应该创建目录
dirFile.mkdirs();
}
//4.防止文件重名 UUID.后缀
String uuid = UUID.randomUUID().toString().replace("-", "");
//获取.的下标位置
int index = fileName.lastIndexOf(".");
//截取文件类型
String fileType = fileName.substring(index);
//拼接新文件路径
String realFileName = uuid + fileType;
//5.实现文件上传操作
//5.1 准备文件的全路径 文件目录/文件名称
String realFilePath = dirPath + realFileName;
//5.2 实现文件上传
file.transferTo(new File(realFilePath));
//6.封装返回值结果
//封装虚拟路径 /2021/11/11/uuid.jpg
String virtualPath = dateDir + realFileName;
//封装URL地址 协议名称://域名:端口号/图片虚拟地址
String urlPath = preURLPath + virtualPath;
System.out.println("图片网络地址:"+urlPath);
//封装VO对象
ImageVO imageVO = new ImageVO();
imageVO.setVirtualPath(virtualPath);
imageVO.setUrlPath(urlPath);
imageVO.setFileName(realFileName);
return imageVO;
} catch (IOException e) {
e.printStackTrace();
return null; //如果程序执行报错,则返回null
}
}
}
2.4 代码调试
图片网络地址: http://image.jt.com/2021/08/11/bcde4a39f32a41b287f3f7b485e80d82.jpg
之后切换为磁盘地址:
F:/images/2021/08/11/bcde4a39f32a41b287f3f7b485e80d82.jpg
2.5 文件删除操作
2.5.1 页面分析
2.5.2 文件上传业务接口
- 请求路径: http://localhost:8091/file/deleteFile
- 请求类型: delete
- 请求参数:
参数名称 | 参数说明 | 备注 |
---|---|---|
virtualPath | 文件上传的虚拟的路径 | 删除时需要磁盘路径一起删除 |
- 返回值结果:
参数名称 | 参数说明 | 备注 |
---|---|---|
status | 状态信息 | 200表示服务器请求成功 201表示服务器异常 |
msg | 服务器返回的提示信息 | 可以为null |
data | 服务器返回的业务数据 | 可以为null |
2.5.3 编辑FileController
/**
* 需求: 实现图片删除
* URL: http://localhost:8091/file/deleteFile?virtualPath=xxx
* 参数: virtualPath= /2021/11/11/xxx.jpg
* 返回值结果: SysResult
*/
@DeleteMapping("/deleteFile")
public SysResult deleteFile(String virtualPath){
fileService.deleteFile(virtualPath);
return SysResult.success();
}
2.5.3 编辑FileServiceImpl
@Override
public void deleteFile(String virtualPath) {
//1.准备文件的全路径 本地路径 + 虚拟地址
String path = localDir + virtualPath;
//2.将路径封装为对象
File file = new File(path);
//3.实现文件删除
file.delete();
}
3 .项目部署流程图
了解未来3天做的任务. 理解:文件上传路径的作用
3.1 .项目发布修改说明
3.1.1 路由地址修改
3.1.2 文件上传路径说明
3.1.3 文件上传路径
3.1.4 动态获取端口号
@RestController
@CrossOrigin
//@PropertySource("classpath:/xxxx.properties")
public class PortController {
//spring容器启动时,自动的加载application.yml文件
//需求:如何动态获取端口!!!
@Value("${server.port}")
private Integer port;
@GetMapping("/getPort")
public String getPort(){
return "当前服务器端口号:"+port;
}
}
4. Linux系统介绍
4.1 下载软件
URL: https://mobaxterm.mobatek.net/download.html
4.2 创建远程链接
4.3 远程链接测试
双机链接之后,如图展现即可,如果链接超时 检查window ping linux IP是否正常
4.3 Linux介绍
说明: 课堂笔记以文档为主.