package com.hnust.research.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import com.hnust.research.domain.User;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

@Controller
@Scope("prototype")
public class CkeditorImg extends ActionSupport{
	private File upload;//文件
	private String uploadFileName;//文件名
	private String uploadContentType;//文件类型
	private String callback;
	
	/**
	 * 验证文件的合法性
	 * 处理ckeditor上传的图片,根据不同的用户,生成不同的文件夹,
	 * 路径格式:upload/username(用户名登录名)/201407(年月)/112131541132123.jpg
	 * 参考了网上csdn里的面一个同志的博客写出来的,这个execute里面并不要配置返回页面
	 * 这个上传文件的方法是给前台用户设计的,每个用户会根据自己的用户名和上传时间建立一个文件夹
	 */
	public String execute() throws Exception{
		HttpServletResponse response=ServletActionContext.getResponse();
		response.setCharacterEncoding("UTF-8");
		PrintWriter out=response.getWriter();
		
		// CKEditor提交的很重要的一个参数 
		callback=ServletActionContext.getRequest().getParameter("CKEditorFuncNum");
		User user=(User) ActionContext.getContext().getSession().get("user");
		if(user!=null){
			String expandName=uploadFileName.substring(uploadFileName.lastIndexOf(".")).toLowerCase();
			if(expandName.equals(".png")||expandName.equals(".gif")||expandName.equals(".bmp")||expandName.equals(".jpg")){//检查扩展名是否合法,bmp,jpg,png,gif
				if(upload.length()>600*1024){//文件超过600K
					out.println("<script type=\"text/javascript\">");    
		            out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'图片大小不能超过600k');");   
		            out.println("</script>");  
		            return null;  
				}
				//进行文件上传操作
				InputStream is=new FileInputStream(upload);
				Date date=new Date();
				SimpleDateFormat formatter=new SimpleDateFormat("yyyyMM");
				String yyyymm=formatter.format(date);
				String fileName=java.util.UUID.randomUUID().toString()+expandName;
				String uploadPath=ServletActionContext.getServletContext().getRealPath("\\upload")+"\\images\\"+user.getUsername()+"\\"+yyyymm+"\\";
				String src="/Research/upload/"+"images/"+user.getUsername()+"/"+yyyymm+"/";
				File file=new File(uploadPath);
				if(!file.exists()){//不存在就创建这个目录
					file.mkdirs();
				}
				File toFile=new File(uploadPath,fileName);
				OutputStream os=new FileOutputStream(toFile);
				byte[] buffer=new byte[1024];
				int length=0;
				while((length=is.read(buffer))>0){
					os.write(buffer,0,length);
				}
				is.close();
				os.close();
				//上传成功之后,返回"图像"选项卡并显示图片
				System.out.println(uploadPath+fileName);
				 out.println("<script type=\"text/javascript\">"); 
			     out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",'" + src+fileName+ "','')");    
			     out.println("</script>");
			     return null;
			}else{//输入文件名不合法信息,这里是调用ckeditor自带的callFunction方法返回信息
				out.println("<script type=\"text/javascript\">");
				out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)');");
				out.println("</script>");
				return null;
			}
		}else{
			System.out.println("未登录用户");
			out.println("<script type=\"text/javascript\">");
			out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'请先登录再上传图片');");
			out.println("</script>");
			return null;
		}
	}
	
	
	public String adminImg() throws Exception{
		HttpServletResponse response=ServletActionContext.getResponse();
		response.setCharacterEncoding("UTF-8");
		PrintWriter out=response.getWriter();
		String expandName=uploadFileName.substring(uploadFileName.lastIndexOf(".")).toLowerCase();
		
		// CKEditor提交的很重要的一个参数 
		callback=ServletActionContext.getRequest().getParameter("CKEditorFuncNum");
		if(expandName.equals(".png")||expandName.equals(".gif")||expandName.equals(".bmp")||expandName.equals(".jpg")){//检查扩展名是否合法,bmp,jpg,png,gif
			if(upload.length()>600*1024){//文件超过600K
				out.println("<script type=\"text/javascript\">");    
	            out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'图片大小不能超过600k');");   
	            out.println("</script>");  
	            return null;  
			}
			//进行文件上传操作
			InputStream is=new FileInputStream(upload);
			Date date=new Date();
			SimpleDateFormat formatter=new SimpleDateFormat("yyyyMM");
			String yyyymm=formatter.format(date);
			String fileName=java.util.UUID.randomUUID().toString()+expandName;
			String uploadPath=ServletActionContext.getServletContext().getRealPath("\\upload")+"\\admin\\images\\";
			String src="/Research/upload/admin/images/";
			File file=new File(uploadPath);
			if(!file.exists()){//不存在就创建这个目录
				file.mkdirs();
			}
			File toFile=new File(uploadPath,fileName);
			OutputStream os=new FileOutputStream(toFile);
			byte[] buffer=new byte[1024];
			int length=0;
			while((length=is.read(buffer))>0){
				os.write(buffer,0,length);
			}
			is.close();
			os.close();
			//上传成功之后,返回"图像"选项卡并显示图片
			System.out.println(uploadPath+fileName);
			 out.println("<script type=\"text/javascript\">"); 
		     out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",'" + src+fileName+ "','')");    
		     out.println("</script>");
		     return null;
		}else{//输入文件名不合法信息,这里是调用ckeditor自带的callFunction方法返回信息
			out.println("<script type=\"text/javascript\">");
			out.println("window.parent.CKEDITOR.tools.callFunction(" + callback + ",''," + "'文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)');");
			out.println("</script>");
			return null;
		}
	}
	
	public File getUpload() {
		return upload;
	}
	public void setUpload(File upload) {
		this.upload = upload;
	}
	public String getUploadFileName() {
		return uploadFileName;
	}
	public void setUploadFileName(String uploadFileName) {
		this.uploadFileName = uploadFileName;
	}
	public String getUploadContentType() {
		return uploadContentType;
	}
	public void setUploadContentType(String uploadContentType) {
		this.uploadContentType = uploadContentType;
	}
	 
}
最近下载更多
TheOne622  LV1 2024年12月10日
1481421104  LV3 2024年11月14日
y_x_happy  LV4 2024年6月25日
educationAAA  LV11 2024年5月25日
ziv5466123  LV7 2023年12月15日
xuweiwowzy  LV5 2023年7月30日
wanglei92  LV2 2023年6月26日
hosinvm  LV7 2022年11月18日
123456781  LV4 2022年7月13日
二十一画  LV10 2022年6月25日
最近浏览更多
KAIzx11  LV7 4月30日
没有啊很开心啊  LV4 3月7日
暂无贡献等级
1481421104  LV3 2024年11月14日
是数据库  LV3 2024年10月28日
微信网友_7211237575856128 2024年10月23日
暂无贡献等级
WBelong  LV8 2024年9月19日
y_x_happy  LV4 2024年6月25日
educationAAA  LV11 2024年5月25日
kQWERTY 2024年5月4日
暂无贡献等级
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友