<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 40,  comments - 187,  trackbacks - 0
    問題:
    ??????? 后臺系統(tǒng)通過FCKeditor上傳圖片或文件到文件系統(tǒng)中,會把相關(guān)的文件和圖片信息轉(zhuǎn)換為html腳本存放于數(shù)據(jù)庫的LOB字段中,而圖片或文件存放于磁盤系統(tǒng)中。假設(shè)外網(wǎng)有一個(gè)應(yīng)用訪問同一個(gè)數(shù)據(jù)庫讀取對應(yīng)信息時(shí),由于圖片存儲在后臺應(yīng)用的文件系統(tǒng)中,在網(wǎng)閘的限制下,前臺的應(yīng)用是無法訪問后臺的文件系統(tǒng)的。前臺得不到圖片,這樣圖片就無法顯示了。

    解決:
    ??????? 在前臺應(yīng)用和后臺文件系統(tǒng)間開放80端口的情況下,我們可以通過以下三種方式解決:
    1)通過重寫FCKeditor的SimpleUploaderServlet
    重寫的目的是為了將圖片存儲的相對路徑改為添加IP地址的絕對路徑訪問,如:原文件存儲路徑為
    /yourapp/UserFiles/Image/logo.gif
    改為:
    http://202.0.0.7:8080/yourapp/UserFiles/Image/logo.gif
    即添加ip,這樣在前端的應(yīng)用可以通過80端口訪問后臺文件系統(tǒng)中的圖片。
    缺點(diǎn)是暴露了后臺應(yīng)用的IP地址,安全性較差。
    ?
    2)通過Servletfilter來過濾URL,監(jiān)聽以/UserFiles/開頭的路徑,添加ip信息在前面,到達(dá)目的。出于安全性的考慮,這里需要兩級的Servlet來過濾URL。后臺發(fā)送到前臺的URL需要添加IP信息以便訪問圖片資源,而前臺應(yīng)用與瀏覽器間需要通過一個(gè)filter來將IP信息過濾掉,從而不會將IP暴露。
    ?
    3)將圖片或文件以二進(jìn)制形式寫入數(shù)據(jù)庫
    ??? 通過重寫FCKeditor的SimpleUploaderServlet,將圖片或文件以二進(jìn)制形式寫入數(shù)據(jù)庫,在前臺應(yīng)用可以訪問數(shù)據(jù)庫的前提下,讀取數(shù)據(jù)庫,按照記錄的URL,將圖片或文件還原到前臺的文件系統(tǒng)中。缺點(diǎn)是后臺圖片或文件更新時(shí),前臺需要全部還原更新。麻煩點(diǎn)兒的話,在寫入數(shù)據(jù)庫時(shí),可以記錄相對應(yīng)的業(yè)務(wù)ID,前臺還原時(shí),只針對業(yè)務(wù)ID還原。

    我這里采用了第三種方法解決問題,具體步驟如下:

    架構(gòu):Hibernate 3.2 + Spring 1.2.8 + struts 1.2.8 + FCKeditor 2.3

    3.1)創(chuàng)建對象
    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;?//附件實(shí)體
    ????
    ????@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
    ????????????
    //?省略?使用原來的文件系統(tǒng)上傳
    ????????????
    //?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) 還原圖片
    ??????? 根據(jù)記錄的URL建立目錄結(jié)構(gòu)并還原圖片
    String?accessoryPath? = ?imageRootPath? + ?accessory.getUrl();
    File?realFile?
    = ? new ?File(accessoryPath);
    if ?( ! realFile.exists())? {? // ?當(dāng)該文件不存在
    ????realFile.mkdirs();? // ?如果文件不存在則創(chuàng)建一個(gè)文件
    ???? 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(
    " 保存文件出錯(cuò)! " );
    ????}
    ????????????
    }



    ???????????????????????????????????????????????????????????????????????????????? THE END
    posted on 2007-09-18 13:22 小立飛刀 閱讀(2159) 評論(5)  編輯  收藏 所屬分類: User Interface

    FeedBack:
    # re: 內(nèi)外網(wǎng)共享FCK editor的上傳文件
    2007-09-18 16:57 | 千里冰封
    呵呵,看不太懂  回復(fù)  更多評論
      
    # re: 內(nèi)外網(wǎng)共享FCK editor的上傳文件
    2007-09-19 02:19 | Alexander.Yu
    好文。。。  回復(fù)  更多評論
      
    # re: 內(nèi)外網(wǎng)共享FCK editor的上傳文件
    2007-09-19 23:10 | haojunq
    我采用的是第一種方法  回復(fù)  更多評論
      
    # re: 內(nèi)外網(wǎng)共享FCK editor的上傳文件
    2007-09-20 09:25 | 小立飛刀
    @haojunq
    一開始想采用第一種方法的,畢竟省事嘛。但考慮到安全問題,還有想記錄下上傳文件的信息,最后采用了第三種。
      回復(fù)  更多評論
      
    # re: 內(nèi)外網(wǎng)共享FCK editor的上傳文件
    2007-09-20 11:26 | 小立飛刀
    @Alexander.Yu
    客氣了
      回復(fù)  更多評論
      
    <2007年9月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

    生存或毀滅,這是個(gè)必答之問題:是否應(yīng)默默的忍受坎苛命運(yùn)之無情打擊,還是應(yīng)與深如大海之無涯苦難奮然為敵,并將其克服。此二抉擇,究竟是哪個(gè)較崇高?

    常用鏈接

    留言簿(12)

    隨筆分類(43)

    相冊

    收藏夾(7)

    朋友的博客

    電子資料

    搜索

    •  

    積分與排名

    • 積分 - 302685
    • 排名 - 192

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成人性生免费视频| 亚洲精品二三区伊人久久| 成人毛片18女人毛片免费| 黄页免费在线观看| 一区二区三区免费在线视频| 亚洲AV成人影视在线观看| 亚洲国产精品婷婷久久| 亚洲精品国产精品国自产观看| 性做久久久久久免费观看| 桃子视频在线观看高清免费视频| 亚洲国产免费综合| 国产青草亚洲香蕉精品久久| 亚洲乱码在线卡一卡二卡新区| 亚洲AV本道一区二区三区四区 | 亚洲一区二区三区久久| 亚洲AV无码成人专区片在线观看| ZZIJZZIJ亚洲日本少妇JIZJIZ| 国产精品国产午夜免费福利看 | 国产午夜亚洲精品国产| 亚洲色偷偷av男人的天堂| 亚洲AV无一区二区三区久久| 国产亚洲AV手机在线观看| 亚洲福利中文字幕在线网址| 四虎永久精品免费观看| 国产精品免费看香蕉| 永久免费看mv网站入口| 美女黄网站人色视频免费国产| 野花高清在线观看免费3中文| 成人在线免费看片| 1024免费福利永久观看网站| 亚洲一区二区三区免费在线观看| 精品无码人妻一区二区免费蜜桃| 日本一卡精品视频免费 | 亚洲国产精彩中文乱码AV| 久久精品亚洲男人的天堂| 亚洲国产午夜中文字幕精品黄网站 | 日韩免费观看视频| 午夜dj免费在线观看| 日本不卡免费新一二三区| 热久久精品免费视频| 国产免费变态视频网址网站|