解释一下下面代码:public void uploadImage1(HttpServletRequest request,MultipartFile file, String getUploadContentType, String getUploadFileName) throws IOException { String getImagePath = request.getSession().getServletContext().getRealPath(imagePath); File image = new File(getImagePath); if (!image.exists()) { image.mkdir(); } // 得到文件的新名字 String fileNewName = Common.generateFileName(getUploadFileName); // 最后返回图片路径 imagePath = imagePath + "/" + fileNewName; BufferedImage srcBufferImage = ImageIO.read(file.getInputStream()); BufferedImage scaledImage; ScaleImage scaleImage = ScaleImage.getInstance(); int yw = srcBufferImage.getWidth(); int yh = srcBufferImage.getHeight(); int w = 400, h = 300; // 如果上传图片 宽高 比 压缩的要小 则不压缩 if (w > yw && h > yh) { FileOutputStream fos = new FileOutputStream(getImagePath + "/" + fileNewName); FileInputStream fis = (FileInputStream) file.getInputStream(); byte[] buffer = new byte[1024]; int len = 0; while ((len = fis.read(buffer)) > 0) { fos.write(buffer, 0, len); } } else { scaledImage = scaleImage.imageZoomOut(srcBufferImage, w, h); FileOutputStream out = new FileOutputStream(getImagePath + "/" + fileNewName); ImageIO.write(scaledImage, "jpeg", out); } }
时间: 2023-06-27 17:08:12 浏览: 179
这是一个Java方法,用于上传图片并对其进行压缩。具体解释如下:
- 参数:
- HttpServletRequest request:HTTP请求对象
- MultipartFile file:上传的文件对象
- String getUploadContentType:上传文件的类型
- String getUploadFileName:上传文件的原始名称
- 方法体:
- 获取图片上传路径:
```
String getImagePath = request.getSession().getServletContext().getRealPath(imagePath);
```
使用`request.getSession().getServletContext().getRealPath()`方法获取服务器上的绝对路径,并将其赋值给`getImagePath`变量。
- 创建路径:
```
File image = new File(getImagePath);
if (!image.exists())
{
image.mkdir();
}
```
判断路径是否存在,如果不存在则创建路径。
- 生成新的文件名:
```
String fileNewName = Common.generateFileName(getUploadFileName);
```
调用一个叫做`Common.generateFileName()`的方法,生成一个新的文件名,并将其赋值给`fileNewName`变量。
- 获取原图信息:
```
BufferedImage srcBufferImage = ImageIO.read(file.getInputStream());
```
使用`ImageIO.read()`方法获取上传文件的输入流,并将其转换成`BufferedImage`对象,以便进行压缩。
- 压缩图片:
```
BufferedImage scaledImage;
ScaleImage scaleImage = ScaleImage.getInstance();
int yw = srcBufferImage.getWidth();
int yh = srcBufferImage.getHeight();
int w = 400, h = 300;
if (w > yw && h > yh)
{
// 如果上传图片 宽高 比 压缩的要小 则不压缩
FileOutputStream fos = new FileOutputStream(getImagePath + "/" + fileNewName);
FileInputStream fis = (FileInputStream) file.getInputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0)
{
fos.write(buffer, 0, len);
}
}
else
{
// 如果上传图片 宽高 比 压缩的要大 则压缩
scaledImage = scaleImage.imageZoomOut(srcBufferImage, w, h);
FileOutputStream out = new FileOutputStream(getImagePath + "/" + fileNewName);
ImageIO.write(scaledImage, "jpeg", out);
}
```
判断上传的图片的宽高是否比压缩后的要小,如果是,则不进行压缩,直接保存原图;否则,使用一个叫做`ScaleImage.imageZoomOut()`的方法,将原图压缩成指定宽高的图片,并将其保存在服务器上。
- 返回压缩后的图片路径:
```
imagePath = imagePath + "/" + fileNewName;
```
将图片路径赋值给`imagePath`变量,并返回该变量。
阅读全文