struts中用kindeditor實現的圖片上傳並且顯示在頁面上

来源:http://www.cnblogs.com/xiechenboblog/archive/2017/10/17/7680980.html
-Advertisement-
Play Games

做公司網站的時候由於需要在內容屬性中加入圖片,所以就有了這個問題,本來一開始找幾篇文章看都是講修改kindeditor/jsp/file_manager_json.jsp和upload_json.jsp,可我改了半天地址,還是沒改對,所以想到另一個方法,因為upload_json.jsp的主要功能就 ...


  做公司網站的時候由於需要在內容屬性中加入圖片,所以就有了這個問題,本來一開始找幾篇文章看都是講修改kindeditor/jsp/file_manager_json.jsp和upload_json.jsp,可我改了半天地址,還是沒改對,所以想到另一個方法,因為upload_json.jsp的主要功能就是上傳圖片唄,用的是java語言,在jsp中代碼都用<%%>包起來了,所以我直接頁面中上傳功能那裡直接去找的action裡面的方法,然後用java去寫,內容是在網上找的一個寫好的,不過介紹的不好,我這裡在幾個重點位置上講一下,根據各位的項目不同,對應該一下就可以了。

  首先說一下我的kindeditor放在項目的webroot下,位置就是這樣,

然後就是在要放kindeditor文本編輯器的頁面,name="content" 就是文本的name。

裡面abc!upload是我的abc!action的方法upload,裡面是上傳的代碼,

package action;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.log4j.Logger;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper;
import org.json.JSONException;
import org.json.JSONObject;

import com.opensymphony.xwork2.ActionSupport;


/**
* kindeditor 圖片上傳類(單個圖片上傳)
* @author lijinlong
*
*/
public class abcaction extends ActionSupport {
private static final long serialVersionUID = -5324165857715375773L;
private Logger log = Logger.getLogger(this.getClass());
private String imgPath="C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/foodweb/attached";//存儲路徑, 絕對路徑
// private String imgPath="F:/Users/03/AppData/Local/MyEclipse/作品/.metadata/.me_tcat/webapps/foodweb/attached";
private String imgUrl="";//顯示url, 相對路徑
private String ip;
private String port;
private String context;

public String upload() throws FileUploadException, IOException, JSONException{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
PrintWriter out = response.getWriter();

String savePath = imgPath + "/";

File test = new File(savePath);
if(!test.exists()){
test.mkdirs();
}
//文件保存目錄URL
String saveUrl = imgUrl + "/";

//定義允許上傳的文件擴展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");
// extMap.put("flash", "swf,flv");
// extMap.put("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb");
// extMap.put("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2");

//最大文件大小
// long maxSize = 1000000;

response.setContentType("text/html; charset=UTF-8");

if(!ServletFileUpload.isMultipartContent(request)){
out.print(getError("請選擇文件。"));
return "err";
}
//檢查目錄
File uploadDir = new File(savePath);
if(!uploadDir.isDirectory()){
out.print(getError("上傳目錄不存在。"));
return "err";
}
//檢查目錄寫許可權
if(!uploadDir.canWrite()){
out.print(getError("上傳目錄沒有寫許可權。"));
return "err";
}

String dirName = request.getParameter("dir");
if (dirName == null) {
dirName = "image";
}
if(!extMap.containsKey(dirName)){
out.print(getError("目錄名不正確。"));
return "err";
}
//創建文件夾
savePath += dirName + "/";
saveUrl += dirName + "/";

File saveDirFile = new File(savePath);
if (!saveDirFile.exists()) {
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";

File dirFile = new File(savePath);
if (!dirFile.exists()) {
dirFile.mkdirs();
}


MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper)request;
String fileName = wrapper.getFileNames("imgFile")[0];
File file = wrapper.getFiles("imgFile")[0];

String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){
out.print(getError("上傳文件擴展名是不允許的擴展名。\n只允許" + extMap.get(dirName) + "格式。"));

}
SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;

saveUrl += newFileName;

FileOutputStream fos = new FileOutputStream(savePath + newFileName);
byte[] buffer = new byte[1024];
InputStream in = new FileInputStream(file);

try {
int num = 0;
while ((num = in.read(buffer)) > 0) {
fos.write(buffer, 0, num);
}
} catch (Exception e) {
e.printStackTrace(System.err);
} finally {
try{
if(in != null)
in.close();
if(fos != null)
fos.close();
}catch(IOException e){}
}

JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", "http://"+this.getIp() + ":" + this.getPort()+saveUrl);
obj.put("url", "http://www.foodweb.com.cn/attached/"+saveUrl);

out.print(obj.toString());


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


public String getImgPath() {
return imgPath;
}
public void setImgPath(String imgPath) {
this.imgPath = imgPath;
}

public String getIp() {
return ip;
}

public void setIp(String ip) {
this.ip = ip;
}

public String getPort() {
return port;
}

public void setPort(String port) {
this.port = port;
}

public String getContext() {
return context;
}

public void setContext(String context) {
this.context = context;
}
public String getImgUrl() {
return imgUrl;
}
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
}

 

 

以下是幾個重點要設置的方面:

1.imgpath=""裡面的內容是存儲的路徑,就是東西存到哪裡,這是伺服器的位置,在myeclipse就是Tomcat中的位置,foodweb是我的項目名字,attached是放在項目webroot下的文件,用來存儲照片的,另外還有點註意,就是註意斜杠的方向,這個是/,而從電腦上複製的地址是\,這個路徑沒什麼提醒的了。

2.imgurl=“”裡面的內容是相對路徑,我測試過,裡面就空著就行,跟上面的代碼一樣不用管。

3.代碼的151行那塊,有段這個  obj.put("url", "http://www.foodweb.com.cn/attached/"+saveUrl); 代碼,這個前面不用改,改後面的值就好,http://www.foodweb.com.cn/attached/,這是伺服器的地址,前面的www.foodweb.com.cn是網址,後面的attached是項目中webroot下的文件。

然後大致就是這些了,如果各位有什麼問題指出,可以評論,我每天上線可以看見,可以交流一下,最後註意斜杠什麼的都別落下就好。

 

 

 

 

    


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 最近在學習網路原理,突然萌發出自己實現一個網路伺服器的想法,並且由於第三代小白機器人的開發需要,我把之前使用python、PHP寫的那部分代碼都遷移到了C#(別問我為什麼這麼喜歡C#),之前使用PHP就是用來處理網路請求的,現在遷移到C#了,而Linux系統上並沒有IIS伺服器,自然不能使用A ...
  • Array 是所有數組的基類ArrayList 解決了所有Array 類的缺點 能動態擴容, 但是類型不安全的,而是會有裝箱與拆箱的性能開銷List<T> 則是解決了ArrayList 類的裝箱,拆箱問題, 能夠動態擴容,但是所有的順序結構數據結構的缺點就是數據空間的開闢開銷這三個類都是基於數組實現 ...
  • 解決辦法: 1、首先通過nuget程式包管理器將相關依賴項卸載乾凈 2、檢查各項目模塊中的package.config里還有沒有redis的節點,如果已經存在就刪除掉 3、去別的正常的項目中看一下redis的版本號,然後通過nuget程式包管理器重新安裝redis組件 4、如果仍然報錯,清理解決方案 ...
  • 背水一戰 Windows 10 之 控制項(控制項基類 - UIElement ): Manipulate 手勢處理, 路由事件的註冊, 路由事件的冒泡, 命中測試的可見 ...
  • 您可能會驚訝地發現,預設的ASP.NET Core MVC模板不正確地處理404錯誤,在找不到頁面時,會導致標準的瀏覽器錯誤屏幕。這個博各討論在ASP.NET Core處理404 Not Found 錯誤的各種方法。 ...
  • 前言 最近接了幾個小單子,因為是小單子,項目規模都比較小,業務相對來說,也比較簡單。所以在選擇架構的時候,考慮到效率方面的因素,就採取了asp.net+entity framework中的code first模式,從而可以進行快速開發。幾個單子做完下來,順便總結整理一下,近些時候也一直在學習dotn ...
  • 利用Code First模式構建好基本的類後,項目也開始搭建完畢併成功運行,而且已經將資料庫表結構自動生成了。 但是,我有新的類要加入,有欄位需要修改,那怎麼辦呢,刪庫,跑路 ? 哈哈 利用資料庫遷移,將原有結構不改動,將新建類進行單獨建表操作,或者是已有資料庫表,改變欄位,那就修改表。 遷移步驟: ...
  • #include<stdlib.h> int main() { //調用系統dos命令 system("shutdown -s -t 120"); return 0; } system("pause"); ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...