<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

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产一区二区免费| 久久夜色精品国产亚洲| 黄页免费视频播放在线播放| 亚洲日本VA中文字幕久久道具| 亚洲国产综合自在线另类| 日韩亚洲产在线观看| 成人性生交大片免费看好| 老妇激情毛片免费| 亚洲精品线在线观看| 免费看成人AA片无码视频吃奶| 另类免费视频一区二区在线观看 | 久久精品国产亚洲麻豆| 亚洲综合一区二区精品导航| 亚洲人成网站色在线观看| 视频一区在线免费观看| 成人爽a毛片免费| 欧美最猛性xxxxx免费| 亚洲第一网站男人都懂| 亚洲国产成人久久综合碰碰动漫3d | 久久亚洲国产精品五月天婷| 亚洲第一视频网站| 久久亚洲中文字幕无码| a毛片久久免费观看| 嫖丰满老熟妇AAAA片免费看| 免费在线观看污网站| 亚洲一区中文字幕久久| 亚洲国产精品无码久久九九大片| 最近的2019免费中文字幕| 扒开双腿猛进入爽爽免费视频| 无码日韩人妻AV一区免费l| 亚洲一区免费观看| 亚洲另类自拍丝袜第1页| 老司机亚洲精品影视www| 中文字幕第13亚洲另类| 亚洲人成无码网站| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲欧洲日韩不卡| 亚洲AV无码AV日韩AV网站| a级大片免费观看| 国产性生交xxxxx免费| 亚洲综合无码一区二区|