`

struts2文件上传

阅读更多
package com.hugui.qq.web.action.article;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.springframework.stereotype.Controller;

import com.opensymphony.xwork2.ActionSupport;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

@Controller
@ParentPackage(value="struts-default")
@Namespace("/qqZone")
@SuppressWarnings("unused")
public class ArticleimageuploadAction extends ActionSupport  implements ServletRequestAware {
	private static final long serialVersionUID = 572146812454l;
	private static final int BUFFER_SIZE = 16 * 1024;

	private File file;
	private String contentType;
	private String fileName;
	private String imageFileName;
	private String caption;
	
	private HttpServletRequest request;
	private HttpSession session;
	private HttpServletResponse response;

	public void setServletRequest(HttpServletRequest request) {
		this.request = request;
		this.session = request.getSession();
		this.response = ServletActionContext.getResponse();
	}

	private static void copy(File src, File dst) {
		try {
			InputStream in = null;
			OutputStream out = null;
			try {
				in = new BufferedInputStream(new FileInputStream(src),BUFFER_SIZE);
				out = new BufferedOutputStream(new FileOutputStream(dst),BUFFER_SIZE);
				byte[] buffer = new byte[BUFFER_SIZE];
				while (in.read(buffer) > 0) {
					out.write(buffer);
				}
			} finally {
				if (null != in) {in.close();}
				if (null != out) {out.close();}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 得到文件.扩展名
	 */
	private static String getExtention(String fileName) {
		int pos = fileName.lastIndexOf(".");
		return fileName.substring(pos);
	}
	
	private void writeToHtml(String message){
		try {
			response.setCharacterEncoding("UTF-8");
			response.getOutputStream().write(message.getBytes());
			response.flushBuffer();
		} catch (IOException e) {}
		
	}

	public void upload() {
		imageFileName = new Date().getTime() + getExtention(fileName);
		Integer userId = (Integer)session.getAttribute("userId");
		String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";
		String path = "/user_files/"+userId+"/images/private/";
		String filePath = ServletActionContext.getServletContext().getRealPath(path);
		String fileurl = filePath + "/" + imageFileName;
		String file_url = basePath + path+ imageFileName;
		File fileDir = new File(filePath);
		File imageFile = new File(fileurl);
		//-------------------------------进行一些必要的判断,如果文件类型,文件大小-------------------------------
		try{
			String message = "";
			/** 判断文件类型 **/
			String file_extention = getExtention(fileName);
			String [] allowName = new String[]{".jpg",".gif",".jpeg",".png",".bmp"};
			boolean isAllow = false;
			for(String s : allowName){
				if(s.equalsIgnoreCase(file_extention)){
					isAllow = true;
				}
			}
			if(isAllow == false){
				message = "<script language=javascript>alert('上传格式错误!');history.back(-1);</script>";
				writeToHtml(message);
				return;
			}
			long file_size_max = 1048576;//图片大小设置
			long file_size = file.length();
			if(file_size < 10024){
				message = "<script language=javascript>alert('上传图片大小应控制在10K~1M之间!');history.back(-1);</script>";
				writeToHtml(message);
				return;
			}
			if(file_size < file_size_max){
				if(!fileDir.exists()){
					fileDir.mkdirs();
				}
				copy(file, imageFile);
				//-----------------------上传完成,开始生成缩略图-------------------------    
				java.io.File file = new java.io.File(fileurl); //读入刚才上传的文件
				String newFilePath = ServletActionContext.getServletContext().getRealPath("/user_files/"+userId+"/images/private/small/"); //新的缩略图保存地址
				File newDir = new File(newFilePath);
				if(!newDir.exists()){
					newDir.mkdirs();
				}
				String newurl = newFilePath +"/"+imageFileName;;
				Image src = null;
				try {
					src = javax.imageio.ImageIO.read(file);
				} catch (IOException e) {} //构造Image对象
				float tagsize = 300;
				int old_w = src.getWidth(null); //得到源图宽
				int old_h = src.getHeight(null);
				int new_w = 0;
				int new_h = 0; //得到源图长
				//int tempsize;
				float tempdouble;
				if (old_w > old_h) {
					tempdouble = old_w / tagsize;
				} else {
					tempdouble = old_h / tagsize;
				}
				new_w = Math.round(old_w / tempdouble);
				new_h = Math.round(old_h / tempdouble);//计算新图长宽
				BufferedImage tag = new BufferedImage(new_w, new_h,	BufferedImage.TYPE_INT_RGB);
				tag.getGraphics().drawImage(src, 0, 0, new_w, new_h,null); //绘制缩小后的图
				FileOutputStream newimage = new FileOutputStream(newurl); //输出到文件流
				JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(newimage);
				encoder.encode(tag); //近JPEG编码
				newimage.close();
				message = "<SCRIPT language='javascript'>"+
							"window.parent.document.getElementById('picture').value='" + file_url + "';"+
							"window.location.href='"+basePath+"/editor/upapi/upload.jsp';"+
							"</script>";
				writeToHtml(message);
				return;
			}else{
				message = "<SCRIPT language='javascript'>"+
						"alert(''上传文件大小不能超过"+ (file_size_max /1048576) + "M'');"+
						"history.back(-1);"+
						"</SCRIPT>";
				writeToHtml(message);
				return;
			}
		}catch(Exception e){
			e.toString();
		}
	
	}

	public void setFileContentType(String contentType) {
		this.contentType = contentType;
	}

	public void setFileFileName(String fileName) {
		this.fileName = fileName;
	}

	public void setFile(File file) {
		this.file = file;
	}

	public String getImageFileName() {
		return imageFileName;
	}

	public String getCaption() {
		return caption;
	}

	public void setCaption(String caption) {
		this.caption = caption;
	}
	
}
分享到:
评论

相关推荐

    struts2文件上传和下载

    struts2文件上传和下载 struts2文件上传和下载 struts2文件上传和下载 struts2文件上传和下载 struts2文件上传和下载

    struts2 文件上传

    struts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileuploadstruts2 文件上传 struts2上传标签file fileupload

    struts2文件上传实例

    struts2文件上传实例,程序员宝典......

    struts2文件上传jar

    里面包括的是实现struts2文件上传所需要的全部jar包

    Struts2文件上传

    Struts2文件上传

    Struts2 文件上传

    Struts2 文件上传

    Struts2文件上传源码

    Struts2文件上传源码 Struts2文件上传源码 Struts2文件上传源码 Struts2文件上传源码 Struts2文件上传源码

    struts2文件上传与下载

    struts2文件上传与下载,eclipse与myeclipse导入即可使用的代码,简单易懂,希望对你有帮助,喜欢的给个五星评价,谢谢!!!

    struts2 文件上传功能

    Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。从而我们就能够以本地文件方式的操作浏览器上传的...

    struts2文件上传下载源代码

    http://blog.csdn.net/johnjobs/article/details/8076832博文中附件的下载链接

Global site tag (gtag.js) - Google Analytics