廢話不說了。。直接上代碼。。。 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實現文件的上傳了。。