重明鳥
BlogJava
首頁
新隨筆
聯系
聚合
管理
posts - 40, comments - 187, trackbacks - 0
內外網共享FCK editor的上傳文件
問題:
??????? 后臺系統通過FCKeditor上傳圖片或文件到文件系統中,會把相關的文件和圖片信息轉換為html腳本存放于數據庫的LOB字段中,而圖片或文件存放于磁盤系統中。假設外網有一個應用訪問同一個數據庫讀取對應信息時,由于圖片存儲在后臺應用的文件系統中,在網閘的限制下,前臺的應用是無法訪問后臺的文件系統的。前臺得不到圖片,這樣圖片就無法顯示了。
解決:
??????? 在前臺應用和后臺文件系統間開放80端口的情況下,我們可以通過以下三種方式解決:
1)通過重寫FCKeditor的SimpleUploaderServlet
重寫的目的是為了將圖片存儲的相對路徑改為添加IP地址的絕對路徑訪問,如:原文件存儲路徑為
/yourapp/UserFiles/Image/logo.gif
改為:
http://202.0.0.7:8080/yourapp/UserFiles/Image/logo.gif
即添加ip,這樣在前端的應用可以通過80端口訪問后臺文件系統中的圖片。
缺點是暴露了后臺應用的IP地址,安全性較差。
?
2)通過Servletfilter來過濾URL,監聽以/UserFiles/開頭的路徑,添加ip信息在前面,到達目的。出于安全性的考慮,這里需要兩級的Servlet來過濾URL。后臺發送到前臺的URL需要添加IP信息以便訪問圖片資源,而前臺應用與瀏覽器間需要通過一個filter來將IP信息過濾掉,從而不會將IP暴露。
?
3)將圖片或文件以二進制形式寫入數據庫
??? 通過重寫FCKeditor的SimpleUploaderServlet,將圖片或文件以二進制形式寫入數據庫,在前臺應用可以訪問數據庫的前提下,讀取數據庫,按照記錄的URL,將圖片或文件還原到前臺的文件系統中。缺點是后臺圖片或文件更新時,前臺需要全部還原更新。麻煩點兒的話,在寫入數據庫時,可以記錄相對應的業務ID,前臺還原時,只針對業務ID還原。
我這里采用了第三種方法解決問題,具體步驟如下:
架構:Hibernate 3.2 + Spring 1.2.8 + struts 1.2.8 + FCKeditor 2.3
3.1)創建對象
import
?java.sql.Blob;
import
?javax.persistence.Column;
import
?javax.persistence.Entity;
import
?javax.persistence.Lob;
import
?javax.persistence.Table;
import
?javax.persistence.Temporal;
import
?javax.persistence.TemporalType;
import
?com.zhjy.frwk.domain.BaseNameObject;
/**?*/
/**
?*?存放上傳附件及其描述信息
?*?Accessory
?*?
@author
?Allen
?
*/
@SuppressWarnings(
"
serial
"
)
@Entity
@Table(name?
=
?
"
GEA_ACCESSORY
"
)
public
?
class
?Accessory?
extends
?BaseNameObject?
{
????
//
id,?name,?desn?this?three?attributes?exist?in?super?class
????
????String?url;?
//
附件相對路徑
????
????@Column(name
=
"
content
"
)
????@Lob
????
protected
?Blob?content;?
//
附件實體
????
????@Temporal(TemporalType.DATE)
????
private
?java.util.Date?createTime;
????
????
private
?String?createBy;
????
//
?省略set&get方法
????
}
3.2)重寫SimpleUploaderServlet
??? 重寫了SimpleUploaderServlet的doPost方法
@SuppressWarnings(
{?
"
deprecation
"
,?
"
unchecked
"
?}
)
????
public
?
void
?doPost(HttpServletRequest?request,?HttpServletResponse?response)?
throws
?ServletException,?IOException?
{
????????
if
?(debug)?System.out.println(
"
---?BEGIN?DOPOST?---
"
);
????????
//
?
????????
if
(enabled)?
{
????????????
//
?upload?to?disk?file
????????????
//
?省略?使用原來的文件系統上傳
????????????
//
?upload?to?database?by?zhengli?07.09.05
????????????Accessory?accessory?
=
?
new
?Accessory();
????????????accessory.setName(fileName);
????????????accessory.setDesn(
"
this?is?a?picture!
"
);
????????????accessory.setUrl(fileUrl);
????????????accessory.setCreateBy(
"
DefaultUser
"
);
????????????accessory.setCreateTime(CommonDateUtils.getCalendar().getTime());
????????????Blob?pic?
=
?
null
;
????????????FileInputStream?in?
=
?
null
;
????????????
try
?
{
????????????????String?fileLocation?
=
?currentDirPath?
+
?
"
\\
"
?
+
?fileName;
????????????????in?
=
?
new
?FileInputStream(fileLocation);
????????????????pic?
=
?Hibernate.createBlob(in);
????????????????accessory.setContent(pic);
????????????????getAccessoryService().save(accessory);
????????????????
????????????}
?
catch
?(FileNotFoundException?e)?
{
????????????????_log.error(e.getMessage(),?e);
????????????}
?
catch
?(IOException?e)?
{
????????????????_log.error(e.getMessage(),?e);
????????????}
?
finally
?
{
????????????????in.close();
????????????}
????????}
????????
else
?
{
????????????retVal
=
"
1
"
;
????????????errorMessage
=
"
This?file?uploader?is?disabled.?Please?check?the?WEB-INF/web.xml?file
"
;
????????}
????????
????????
//
????
????????
if
?(debug)?System.out.println(
"
---?END?DOPOST?---
"
);???????????
}
3.3) 還原圖片
??????? 根據記錄的URL建立目錄結構并還原圖片
String?accessoryPath?
=
?imageRootPath?
+
?accessory.getUrl();
File?realFile?
=
?
new
?File(accessoryPath);
if
?(
!
realFile.exists())?
{?
//
?當該文件不存在
????realFile.mkdirs();?
//
?如果文件不存在則創建一個文件
????
try
?
{
????????InputStream?input?
=
?accessory.getContent().getBinaryStream();
????????FileOutputStream?output?
=
?
new
?FileOutputStream(accessoryPath);
????????
byte
[]?b?
=
?
new
?
byte
[
1024
?
*
?
5
];
????????
int
?len;
????????
while
?((len?
=
?input.read(b))?
!=
?
-
1
)?
{
????????????output.write(b,?
0
,?len);
????????}
????????output.flush();
????????output.close();
????????input.close();
????}
?
catch
?(Exception?e)?
{
????????e.printStackTrace();
????????logger.error(
"
保存文件出錯!
"
);
????}
????????????
}
????????????????????????????????????????????????????????????????????????????????
THE END
posted on 2007-09-18 13:22
小立飛刀
閱讀(2158)
評論(5)
編輯
收藏
所屬分類:
User Interface
FeedBack:
#
re: 內外網共享FCK editor的上傳文件
2007-09-18 16:57 |
千里冰封
呵呵,看不太懂
回復
更多評論
#
re: 內外網共享FCK editor的上傳文件
2007-09-19 02:19 |
Alexander.Yu
好文。。。
回復
更多評論
#
re: 內外網共享FCK editor的上傳文件
2007-09-19 23:10 |
haojunq
我采用的是第一種方法
回復
更多評論
#
re: 內外網共享FCK editor的上傳文件
2007-09-20 09:25 |
小立飛刀
@haojunq
一開始想采用第一種方法的,畢竟省事嘛。但考慮到安全問題,還有想記錄下上傳文件的信息,最后采用了第三種。
回復
更多評論
#
re: 內外網共享FCK editor的上傳文件
2007-09-20 11:26 |
小立飛刀
@Alexander.Yu
客氣了
回復
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
值得推薦的一款原型設計工具-Balsamiq Mockups
易用性的三條原則(轉)
如何使用ECSide列表組件構建列表(內附源碼)
奇怪的Java.lang.Object@xxx問題
JScript常見錯誤解釋
內外網共享FCK editor的上傳文件
Copyright ©2025 小立飛刀 Powered By:
博客園
模板提供:
滬江博客
<
2007年9月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
生存或毀滅,這是個必答之問題:是否應默默的忍受坎苛命運之無情打擊,還是應與深如大海之無涯苦難奮然為敵,并將其克服。此二抉擇,究竟是哪個較崇高?
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(12)
給我留言
查看公開留言
查看私人留言
隨筆分類
(43)
Database(6)
Hibernate(8)
Java IDE(1)
JavaEE Servers(5)
Javascript
LDAP(4)
Mondrian OLAP(1)
Objective-C
Others(2)
Portal(2)
Spring(6)
User Interface(6)
WebService(1)
XForms(1)
相冊
技術圖片
收藏夾
(7)
BI in Java(6)
SAP(1)
朋友的博客
目標驅動
小建的博客
電子資料
Hibernate Annotations Reference in Chinese
搜索
積分與排名
積分 - 302638
排名 - 192
最新評論
1.?re: 如何同時啟動多個Tomcat服務器[未登錄]
倆個同樣的tomcat,兩個同樣的jdk這樣的配置怎么能,同時啟動倆個tomcat。已啟動就報jvm,請問如何修改呢?
--小西
2.?re: Spring的依賴關系(JAR)
評論內容較長,點擊標題查看
--zuidaima
3.?re: Java EE十大性能問題
GOOD OPINION
--Sarah Nelson
4.?re: Java EE十大性能問題
Very well written.
--Alexia Marthoon
5.?re: Java EE十大性能問題
nice post
--Olivia Jennifer
閱讀排行榜
1.?如何同時啟動多個Tomcat服務器(60453)
2.?又見“ORA-01461: 僅可以為插入 LONG 列的 LONG 值賦值”!(32740)
3.?Spring Quartz如何動態配置時間(3)(20701)
4.?使用Hibernate Annotations 維護多對多關系的心得(14598)
5.?Tomcat給我的java.lang.OutOfMemoryError: PermGen(14309)
評論排行榜
1.?Spring Quartz如何動態配置時間(3)(22)
2.?如何同時啟動多個Tomcat服務器(19)
3.?值得推薦的一款原型設計工具-Balsamiq Mockups(15)
4.?Quartz Cron Expression(14)
5.?如何使用ECSide列表組件構建列表(內附源碼)(10)
主站蜘蛛池模板:
国产一区二区免费
|
久久夜色精品国产亚洲
|
黄页免费视频播放在线播放
|
亚洲日本VA中文字幕久久道具
|
亚洲国产综合自在线另类
|
日韩亚洲产在线观看
|
成人性生交大片免费看好
|
老妇激情毛片免费
|
亚洲精品线在线观看
|
免费看成人AA片无码视频吃奶
|
另类免费视频一区二区在线观看
|
久久精品国产亚洲麻豆
|
亚洲综合一区二区精品导航
|
亚洲人成网站色在线观看
|
视频一区在线免费观看
|
成人爽a毛片免费
|
欧美最猛性xxxxx免费
|
亚洲第一网站男人都懂
|
亚洲国产成人久久综合碰碰动漫3d
|
久久亚洲国产精品五月天婷
|
亚洲第一视频网站
|
久久亚洲中文字幕无码
|
a毛片久久免费观看
|
嫖丰满老熟妇AAAA片免费看
|
免费在线观看污网站
|
亚洲一区中文字幕久久
|
亚洲国产精品无码久久九九大片
|
最近的2019免费中文字幕
|
扒开双腿猛进入爽爽免费视频
|
无码日韩人妻AV一区免费l
|
亚洲一区免费观看
|
亚洲另类自拍丝袜第1页
|
老司机亚洲精品影视www
|
中文字幕第13亚洲另类
|
亚洲人成无码网站
|
区三区激情福利综合中文字幕在线一区亚洲视频1
|
亚洲欧洲日韩不卡
|
亚洲AV无码AV日韩AV网站
|
a级大片免费观看
|
国产性生交xxxxx免费
|
亚洲综合无码一区二区
|