<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
    問題:
    ??????? 后臺系統通過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
    客氣了
      回復  更多評論
      
    <2007年9月>
    2627282930311
    2345678
    9101112131415
    16171819202122
    23242526272829
    30123456

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

    常用鏈接

    留言簿(12)

    隨筆分類(43)

    相冊

    收藏夾(7)

    朋友的博客

    電子資料

    搜索

    •  

    積分與排名

    • 積分 - 302638
    • 排名 - 192

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 成年女人免费视频播放体验区| 亚洲成av人在片观看| 成年18网站免费视频网站| 亚洲综合一区无码精品| 在线A亚洲老鸭窝天堂| a一级毛片免费高清在线| 亚洲不卡无码av中文字幕| 国产在线一区二区综合免费视频| 久久精品国产亚洲AV久| 亚洲熟妇无码AV在线播放| 无码国产精品一区二区免费式影视| 国产产在线精品亚洲AAVV| 亚洲精品免费视频| 又粗又硬又黄又爽的免费视频| 99亚洲男女激情在线观看| 亚洲福利在线观看| 曰曰鲁夜夜免费播放视频| jizz在线免费观看| 激情五月亚洲色图| 久久久久亚洲av无码专区蜜芽| 国产又黄又爽又猛的免费视频播放| 日韩电影免费在线观看| 鲁啊鲁在线视频免费播放| 亚洲人成综合网站7777香蕉| 亚洲AV无码一区二区乱孑伦AS| 国产乱人免费视频| 无人影院手机版在线观看免费| 一区二区三区观看免费中文视频在线播放 | www国产亚洲精品久久久| 成人久久久观看免费毛片| 亚洲13又紧又嫩又水多| 亚洲成色WWW久久网站| 亚洲A丁香五香天堂网| 成人免费福利电影| 67194国产精品免费观看| 你好老叔电影观看免费| 成人特级毛片69免费观看| 亚洲第一第二第三第四第五第六| 亚洲国产精品视频| 国产成人免费a在线视频色戒| 91精品视频免费|