code="java"]
package com.baiying;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
public class FileUpload {
public FileUpload(){}
private void createDir(String uploadPath){
File file = new File(uploadPath);
//如果该文件目录不存在,则创建一个新的目录
if(!file.exists()){
file.mkdir();
}
}
private File createFile(String uploadPath){
File file = new File(uploadPath);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return file;
}
/**
* 得到一个文件输入流
*/
private FileInputStream getStream(String filePath){
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(filePath);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
System.out.println("文件没有找到!");
}
return fileInputStream;
}
/**
* 得到一个文件输出流
*/
private FileOutputStream getOutStream(File file){
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(file);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return fileOutputStream;
}
/**
* 文件大小
*/
public Long getFileSize(String filePath){
//判断该文件是否是一个有效的文件
File file = new File(filePath);
if(file.isFile()){
return file.length();
}
return 0l;
}
/**
* 无限制文件上传
* 包含的属性有:上传目录String uploadPath;文件路径String filePath;上传到服务器的文件名称 String fileName;
*/
public boolean upLoad(String uploadPath,String filePath,String fileName){
boolean isSuccess = true;
this.createDir(uploadPath);
String extension = "";
if(filePath!=null&&!filePath.equals("")){
if(filePath.lastIndexOf(".")!=-1){
extension = filePath.substring(filePath.lastIndexOf(".")+1);
}
}
uploadPath = uploadPath + fileName +"."+extension;//上传保存的路径+文件名
File file = this.createFile(uploadPath);//生成新的文件
Pattern pattern = Pattern.compile("bmp|gif|gepg|png|");
Matcher matcher = pattern.matcher(extension);
if(matcher.find()){
//图片
BufferedImage src = null;
try {
src = javax.imageio.ImageIO.read(new File(filePath));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Image image = null;
BufferedImage oimage = null;
image=src.getScaledInstance(src.getWidth(),src.getHeight(),Image.SCALE_DEFAULT);
oimage = new BufferedImage(src.getWidth(),src.getHeight(),Image.SCALE_DEFAULT);
Graphics g = oimage.getGraphics();
g.drawImage(image,0,0, null);
g.dispose();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
ImageIO.write(oimage,extension,bos);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}// 输出到bos
FileOutputStream out = null;
try {
out = new FileOutputStream(file);
out.write(bos.toByteArray()); //写文件
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(out!=null){
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}else{
//非图片
FileInputStream fis = this.getStream(filePath);
BufferedInputStream bis = new BufferedInputStream(fis);
FileOutputStream fos = this.getOutStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int bytesRead = 0;
byte[] buffer = new byte[8192];
try {
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
bos.write(buffer, 0, bytesRead);// 将文件写入服务器
}
isSuccess = true;
} catch (IOException e) {
// TODO Auto-generated catch block
isSuccess = false;
//e.printStackTrace();
}finally{
try {
if(fos!=null){
fos.close();
}
if(fis!=null){
fis.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return isSuccess;
}
/**
* 限制文件大小的上传---如果超过一定的大小则压缩或者限制上传
* 包含的属性有:上传目录String uploadPath;文件路径String filePath;上传到服务器的文件名称 String fileName;
* 文件限制大小:int commitSize,大小以k表示
* boolean flag:true为压缩大小;false为限制上传
*/
public boolean upLoad(String uploadPath,String filePath,String fileName,int commitSize,boolean flag){
//首先要得到上传的文件后缀名,如果不是图片格式的,则将flag属性修改为false,直接限制其上传,如果是图片格式,则对图片进行压缩
String extension = "";
if(filePath!=null&&!filePath.equals("")){
if(filePath.lastIndexOf(".")!=-1){
extension = filePath.substring(filePath.lastIndexOf(".")+1);
}
}
if(flag){
Pattern pattern = Pattern.compile("bmp|gif|gepg|png|");
Matcher matcher = pattern.matcher(extension);
if(matcher.find()){
flag = true;
}else{
flag = false;
}
}
if(flag){
//压缩大小,主要针对于图片
this.upLoad(uploadPath, filePath, fileName);//将图片保存到服务器
//取得服务器的文件,放入一个新的File对象当中
String filePath_new = uploadPath+fileName + "."+extension;
File f = new File(filePath_new);
FileOutputStream out = null;
while(f.length()>commitSize*1000l){
try {
Image img = ImageIO.read(f);
BufferedImage tag = new BufferedImage(img.getWidth(null)*9/10,img.getHeight(null)*9/10, BufferedImage.TYPE_INT_RGB);
tag.getGraphics().drawImage(img.getScaledInstance(img.getWidth(null)*9/10,img.getHeight(null)*9/10, Image.SCALE_SMOOTH), 0, 0, null);
out = new FileOutputStream(filePath_new);
// JPEGImageEncoder可适用于其他图片类型的转换
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(tag);
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(out!=null){
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
f = new File(filePath_new);
}
}else{
//限制上传
long fileSize = this.getFileSize(filePath);
if(fileSize>commitSize*1000l){
return false;
}else{
return upLoad(uploadPath, filePath, fileName);
}
}
return true;
}
/**
* 加水印的图片上传
*/
/**
* 图片的上传
*/
/**
* 加水印图片
* 包含的属性有:String pressImg,水印图片;String targetImg,目标图片
*/
public void pressImage(String pressImg, String targetImg,
int x, int y) {
try {
File file = new File(targetImg);
Image src = ImageIO.read(file);
int wideth = src.getWidth(null);
int height = src.getHeight(null);
BufferedImage image = new BufferedImage(wideth, height,
BufferedImage.TYPE_INT_RGB);
Graphics g = image.createGraphics();
g.drawImage(src, 0, 0, wideth, height, null);
// 水印文件
File _filebiao = new File(pressImg);
Image src_biao = ImageIO.read(_filebiao);
int wideth_biao = src_biao.getWidth(null);
int height_biao = src_biao.getHeight(null);
g.drawImage(src_biao, wideth - wideth_biao - x, height
- height_biao - y, wideth_biao, height_biao, null);
// /
g.dispose();
FileOutputStream out = new FileOutputStream(targetImg);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
encoder.encode(image);
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*删除文件 对应属性 String filePath
*/
public boolean deleteWebFile(String filePath){
File file = new File(filePath);
if(file.isFile() && file.exists()){
file.delete();
return true;
}else{
return false;
}
}
public static void main(String [] args){
FileUpload f = new FileUpload();
//System.out.println(f.getFileSize("C:\\WINDOWS\\Web\\Wallpaper\\chibi.jpg"));
//System.out.println(f.getFileSize("C:\\WINS\\Web\\Wallpaper\\chijpg"));
//f.upLoad("e:/sstext/", "C:\\WINDOWS\\Web\\Wallpaper\\1920CHINA_2011.jpg", "aaaa");
f.upLoad("E:/sstext/","C:\\WINDOWS\\Web\\Wallpaper\\chibi.jpg","texst",50,true);
}
}
经测试,压缩后图片还未失真!可以根据项目的需求选择是否压缩图片
分享到:
相关推荐
java代码保存上传的文件_压缩图片
2、可以上传图片与非图片文件。有二个重构方法 一、无限制文件大小上传upLoad(String uploadPath,String filePath,String fileName),uploadPath代表上传目录,filePath代表文件路径,fileName 代表上传到服务器上...
使用Java远程上传压缩包到服务器,或者在服务器上拉去压缩包或者文件,在服务器上创建目录。
java中根据设置的宽高等比例压缩图片文件 先保存原文件,再压缩、上传
4.图片上传部分:在文件上传部分已有功能的基础上实现了上传前缩略图预览,前台js文件后缀验证,后台代码文件后缀验证和文件类型验证(就算修改后缀名也无法成功上传),支持图片上传前压缩; 5.多选择器多文件上传...
java代码保存宽高不变压缩图片(失真不大),按照文件大小,进行压缩质量控制
java实现图片的上传,根据需要缩小图片的宽度和高度显示出来!
带java后台的mui图片压缩上传及回显。 图片可以多选,压缩率可以自己设置。 复制过去即可使用。
主要通过java代码实现视频压缩,且提供压缩需要的jave.jar.
压缩图片文件:先保存原文件,再压缩、上传
java图片上传、控制大小、宽度高度和图片裁剪并保存
* 压缩图片文件 * 先保存原文件,再压缩、上传 * @param oldFile 要进行压缩的文件全路径 * @param width 宽度 * @param height 高度 * @param quality 质量 * @param smallIcon 小图片的后缀 * @return ...
奇安信代码卫士,文件上传漏洞解决demo; #### 文件上传可以参考以下安全...4. 对于图片文件进行二次渲染、压缩, 避免图片写马。 5. 校验失败后,记录错误日志信息,内容至少包括时间、用户、IP、操作内容、校验失败
Class类工具 \Cookie工具类 \excel读取 工具类\Java如何生成验证码图片和点击刷新验证码\java获取当前月第一天和最后一天,上个月第一天和最后一天\java实现ftp文件的上传与下载\Json工具类 - JsonUtils.java\JS...
这个里面的文Java文件经过修改后可以支持中文名字的上传下载。支持的格式有图片文本,压缩的等等。是个比较实用和容易看懂的。适合全体学习java的人员。
手机移动端上传图片压缩完美解决方案 LocalResizeIMG+EXIF+ASP后台上传(后台上传文件可自己替换成PHP或JAVA) 完美解决苹果手机拍照上传图片90度旋转问题,EXIF缩减后加入LocalResizeIMG文件,只要两个JS文件引用即可...
文件上传时进行加密,下载时进行对应解密,支持各种各个文件得加密解密,解密后文件可以正常使用,包括图片,压缩包,word文档等等!!附带上传方法,以及以流方式下载的方法
主要为大家详细介绍了java压缩文件和下载图片示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文给大家介绍的是项目中经常需要用到的一个常用的功能,使用java实现文件的上传下载和图片的压缩功能,这里推荐给大家,有需要的小伙伴参考下。
S3文件上传,亚马逊服务器,支持图片裁剪压缩等操作,文档链接https://blog.csdn.net/weixin_39179428/article/details/80923120