Struts2下應用KindEditor

        廢話不說了。。直接上代碼。。。 java

package com.action;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Random;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.json.simple.JSONObject;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private String savePath; // 保存的絕對路徑
	private String fileDir; // 上傳目錄
	private String ext; // 容許的後綴

	public String getExt() {
		return ext;
	}

	public void setExt(String ext) {
		this.ext = ext;
	}

	public String getFileDir() {
		return fileDir;
	}

	public void setFileDir(String fileDir) {
		this.fileDir = fileDir;
	}

	public String getSaveUrl() {
		return ServletActionContext.getRequest().getContextPath();
	}
	
	public String getSavePath() {
		return ServletActionContext.getServletContext().getRealPath(savePath);
	}

	public void setSavePath(String savePath) {
		setFileDir(savePath + "/");
		this.savePath = savePath;
	}

	HashMap<String, String> extMap = new HashMap<String, String>();

	@Override
	public String execute() throws Exception {
		MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) ServletActionContext.getRequest();
		HttpServletResponse response = ServletActionContext.getResponse();
		response.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		String fileName = wrapper.getFileNames("imgFile")[0];
		File file = wrapper.getFiles("imgFile")[0];
		if (file.length() > 400000) {
			out.println(getError("上傳文件大小超過限制。"));
			return null;
		}
		String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1)
				.toLowerCase();
		if (!Arrays.<String> asList(getExt().split(",")).contains(fileExt)) {
			out.println(getError("上傳文件擴展名是不容許的擴展名。\n只容許" + getExt() + "格式。"));
			return null;
		}
		SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
		String newFileName = df.format(new Date()) + "_"
				+ new Random().nextInt(1000) + "." + fileExt;
		FileOutputStream fos = new FileOutputStream(getSavePath() + "\\"
				+ newFileName);
		FileInputStream fis = new FileInputStream(file);
		byte[] buffer = new byte[1204];
		int len = 0;
		while ((len = fis.read(buffer)) > 0) {
			fos.write(buffer, 0, len);
		}
		fis.close();
		fos.close();
		JSONObject obj = new JSONObject();
		obj.put("error", 0);
		obj.put("url", getSaveUrl() + getFileDir() + newFileName);
		out.println(obj.toJSONString());
		return null;
	}

	@SuppressWarnings("unchecked")
	private String getError(String message) {
		JSONObject obj = new JSONObject();
		obj.put("error", 1);
		obj.put("message", message);
		return obj.toJSONString();
	}

}

上面這是實現文件上傳的Action類 徹底能夠取代kindEditor所附帶的那個jsp例子中的upload_json.jsp。 apache

咱們都知道利用表單上傳文件的時候要設置enctype="multipart/form-data" 而後Struts會自動的解析Request請求封裝成MultiPartRequestWrapper類型。而後在Action內部根據表單中文件域的name屬性就能獲得文件內容、文件名以及文件格式。那麼 咱們只要獲得了KindEditor內中用來上傳文件的name屬性 一切就OK了 json

String fileName = wrapper.getFileNames("imgFile")[0];
File file = wrapper.getFiles("imgFile")[0];
經過這兩行代碼就能獲得file 和fileName 。。 app

那麼這就能將文件保存到本地了。。可是kindEditor的文本框是不會顯示圖片的。。。 dom

想要在編輯框顯示信息 還有下面的工做要作。。 jsp

經過觀察實例的那個JSP咱們能夠知道 Action應該應該向調用者返回信息的  咱們不妨模仿那個JSP的功能 ide

HttpServletResponse response = ServletActionContext.getResponse();
response.setCharacterEncoding("UTF-8");
PrintWriter out = response.getWriter();
首先獲得個PrintWriter對象 測試

 if (file.length() > 400000) {
out.println(getError("上傳文件大小超過限制。"));
return null;
}這是判斷文件大小的。。當你看到out.println(getError("上傳文件大小超過限制。"));
相信你已經看出點門道了吧 this

那麼咱們再去看看getError()方法 url

 private String getError(String message) {
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);
return obj.toJSONString();
}

這是例子裏面帶的方法 只是將信息裝換成了json格式 沒什麼神奇的地方 咱們能直接拿來用。

固然 還須要配置Action

  <action name="upload" class="com.action.UploadAction">
   <param name="savePath">/upload</param>
   <param name="ext">gif,jpg,jpeg,png,bmp</param>
   <result name="upload">success.jsp</result>
  </action>

這裏的幾個圖片格式是我本身拿來測試的 想添加什麼格式 徹底能夠本身添加修改。。

固然圖片的大小也應該從程序裏拿出來 經過struts.xml配置注入進去 懶得改了。。。

到這裏 你就能經過Action實現文件的上傳了。。

相關文章
相關標籤/搜索