您的位置:首页 > 其它

关于客户端上传图片和文字,服务器对上传的数据的接收和图片压缩处理

2013-07-05 16:25 726 查看
//获取客户端传递上来的数据和图片

//客户端post提交,将request对象传递进来

public synchronized static boolean uploadreportImage(HttpServletRequest request){

boolean flag=false;

String item=""; //客户端提交的字段

//临时文件名

String temp="D:/apache-tomcat-6.0.20/webapps/temp";

//上传文件存放目录

System.out.println(request.getSession().getServletContext());

System.out.println(loadpath);

DiskFileUpload upload=new DiskFileUpload();

//设置允许用户上传文件大小

upload.setFileSizeMax(10*1024*1024);

//设置只允许在内存中存放的数据大小

upload.setSizeThreshold(10*1024*1024);

//设置文件大小超过getSizeThreshold()的大小,数据存放入硬盘

upload.setRepositoryPath(temp);

upload.setHeaderEncoding("utf-8");

List fileItems = null;

try {

fileItems = upload.parseRequest(request);

} catch (Exception e) {

e.printStackTrace();

}

Iterator iter = fileItems.iterator(); //

//获取客户端传递的图片

while (iter.hasNext()){

FileItem item=(FileItem) iter.next();

if(!item.isFormField()){

name=item.getName();

long size=item.getSize();

if((name!=null && !"".equals(name)) && size>0){

name=System.currentTimeMillis()+".png";

// imagearray.add(name);

File fNew= new File(loadpath, name);

imageName+=name+",";

try {

item.write(fNew);

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

//对图片进行按width和height进行压缩,传递true压缩,传递false不进行压缩

CompressPicDemo mypic = new CompressPicDemo();

mypic.compressPic(UplodImage.loadpath, UplodImage.newloadpath, name, name, 200, 200, false);

name="";

}

}else{

String fieldvalue;

try {

fieldvalue = item.getString("utf-8");

System.out.println("获取普通的数据>>>>>"+item.getFieldName()+"\t"+fieldvalue+"\t"+URLDecoder.decode(URLDecoder.decode(fieldvalue, "utf-8"), "utf-8"));

if(item.getFieldName().equals("item")){

item=URLDecoder.decode(URLDecoder.decode(fieldvalue, "utf-8"), "utf-8");

}

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

if(imageName.trim()!=null && !"".equals(imageName.trim())){

imageName=imageName.substring(0, imageName.length()-1);

}else{

imageName="NOIMAGE";

}

return flag;

}

//图片压缩类

public class CompressPicDemo {

private File file = null; // 文件对象

private String inputDir; // 输入图路径

private String outputDir; // 输出图路径

private String inputFileName; // 输入图文件名

private String outputFileName; // 输出图文件名

private int outputWidth = 100; // 默认输出图片宽

private int outputHeight = 100; // 默认输出图片高

private boolean proportion = true; // 是否等比缩放标记(默认为等比缩放)

public CompressPicDemo() { // 初始化变量

inputDir = "";

outputDir = "";

inputFileName = "";

outputFileName = "";

outputWidth = 100;

outputHeight = 100;

}

public void setInputDir(String inputDir) {

this.inputDir = inputDir;

}

public void setOutputDir(String outputDir) {

this.outputDir = outputDir;

}

public void setInputFileName(String inputFileName) {

this.inputFileName = inputFileName;

}

public void setOutputFileName(String outputFileName) {

this.outputFileName = outputFileName;

}

public void setOutputWidth(int outputWidth) {

this.outputWidth = outputWidth;

}

public void setOutputHeight(int outputHeight) {

this.outputHeight = outputHeight;

}

public void setWidthAndHeight(int width, int height) {

this.outputWidth = width;

this.outputHeight = height;

}

/*

* 获得图片大小

* 传入参数 String path :图片路径

*/

public long getPicSize(String path) {

file = new File(path);

return file.length();

}

// 图片处理

public String compressPic() {

try {

//获得源文件

file = new File(inputDir + inputFileName);

if (!file.exists()) {

return "";

}

Image img = ImageIO.read(file); //这里是从本地读图片文件,如果是执行上传图片的话, Formfile formfile=获得表单提交的Formfile ,然后 ImageIO.read 方法里参数放 formfile.getInputStream()

// 判断图片格式是否正确

if (img.getWidth(null) == -1) {

System.out.println(" can't read,retry!" + "<BR>");

return "no";

} else {

int newWidth; int newHeight;

// 判断是否是等比缩放

if (this.proportion == true) {

// 为等比缩放计算输出的图片宽度及高度

double rate1 = ((double) img.getWidth(null)) / (double) outputWidth + 0.1;

double rate2 = ((double) img.getHeight(null)) / (double) outputHeight + 0.1;

// 根据缩放比率大的进行缩放控制

double rate = rate1 > rate2 ? rate1 : rate2;

newWidth = (int) (((double) img.getWidth(null)) / rate);

newHeight = (int) (((double) img.getHeight(null)) / rate);

} else {

newWidth = outputWidth; // 输出的图片宽度

newHeight = outputHeight; // 输出的图片高度

}

BufferedImage tag = new BufferedImage((int) newWidth, (int) newHeight, BufferedImage.TYPE_INT_RGB);

/*

* Image.SCALE_SMOOTH 的缩略算法 生成缩略图片的平滑度的

* 优先级比速度高 生成的图片质量比较好 但速度慢

*/

tag.getGraphics().drawImage(img.getScaledInstance(newWidth, newHeight, Image.SCALE_SMOOTH), 0, 0, null);

FileOutputStream out = new FileOutputStream(outputDir + outputFileName);

// JPEGImageEncoder可适用于其他图片类型的转换

JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);

encoder.encode(tag);

out.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

return "ok";

}

public String compressPic (String inputDir, String outputDir, String inputFileName, String outputFileName) {

// 输入图路径

this.inputDir = inputDir;

// 输出图路径

this.outputDir = outputDir;

// 输入图文件名

this.inputFileName = inputFileName;

// 输出图文件名

this.outputFileName = outputFileName;

return compressPic();

}

public String compressPic(String inputDir, String outputDir, String inputFileName, String outputFileName, int width, int height, boolean gp) {

// 输入图路径

this.inputDir = inputDir;

// 输出图路径

this.outputDir = outputDir;

// 输入图文件名

this.inputFileName = inputFileName;

// 输出图文件名

this.outputFileName = outputFileName;

// 设置图片长宽

setWidthAndHeight(width, height);

// 是否是等比缩放 标记

this.proportion = gp;

return compressPic();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐