e代劍客——溫柔一刀

          生活就像海洋,只有意志堅(jiān)強(qiáng)的人,才能到達(dá)彼岸

             :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            76 隨筆 :: 7 文章 :: 215 評(píng)論 :: 0 Trackbacks

          實(shí)現(xiàn)圖片上傳
            用戶(hù)必須能夠上傳圖片,因此需要文件上傳的功能。比較常見(jiàn)的文件上傳組件有Commons FileUpload(http://jakarta.apache.org/commons/fileupload/a>)和COS FileUpload(http://www.servlets.com/cos),Spring已經(jīng)完全集成了這兩種組件,這里我們選擇Commons FileUpload。
            由于Post一個(gè)包含文件上傳的Form會(huì)以multipart/form-data請(qǐng)求發(fā)送給服務(wù)器,必須明確告訴DispatcherServlet如何處理MultipartRequest。首先在dispatcher-servlet.xml中聲明一個(gè)MultipartResolver:

          <bean id="multipartResolver"
          ?????? class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
          ??????? <!-- 設(shè)置上傳文件的最大尺寸為1MB -->
          ??????? <property name="maxUploadSize">
          ??????? <value>1048576</value>
          ??? </property>
          </bean>

            這樣一旦某個(gè)Request是一個(gè)MultipartRequest,它就會(huì)首先被MultipartResolver處理,然后再轉(zhuǎn)發(fā)相應(yīng)的Controller。
            在UploadImageController中,將HttpServletRequest轉(zhuǎn)型為MultipartHttpServletRequest,就能非常方便地得到文件名和文件內(nèi)容:

          public ?ModelAndView?handleRequest(HttpServletRequest?request,?HttpServletResponse?response)? throws ?Exception? {
          ????
          // ?轉(zhuǎn)型為MultipartHttpRequest:
          ????MultipartHttpServletRequest?multipartRequest? = ?(MultipartHttpServletRequest)?request;
          ????
          // ?獲得文件:
          ????MultipartFile?file? = ?multipartRequest.getFile( " file " );
          ????
          // ?獲得文件名:
          ????String?filename? = ?file.getOriginalFilename();
          ????
          // ?獲得輸入流:
          ????InputStream?input? = ?file.getInputStream();
          ????
          // ?寫(xiě)入文件
          ????
          ????
          ????
          // 或者:
          ????File?source? = ? new ?File(localfileName.toString());
          ????multipartFile.transferTo(source);
          }

          生成縮略圖 (目錄)
            當(dāng)用戶(hù)上傳了圖片后,必須生成縮略圖以便用戶(hù)能快速瀏覽。我們不需借助第三方軟件,JDK標(biāo)準(zhǔn)庫(kù)就包含了圖像處理的API。我們把一張圖片按比例縮放到120X120大小,以下是關(guān)鍵代碼:

          public ? static ? void ?createPreviewImage(String?srcFile,?String?destFile)? {
          ????
          try ? {
          ????????File?fi?
          = ? new ?File(srcFile);? // ?src
          ????????File?fo? = ? new ?File(destFile);? // ?dest
          ????????BufferedImage?bis? = ?ImageIO.read(fi);


          ????????
          int ?w? = ?bis.getWidth();
          ????????
          int ?h? = ?bis.getHeight();
          ????????
          double ?scale? = ?( double )w / h;
          ????????
          int ?nw? = ?IMAGE_SIZE;? // ?final?int?IMAGE_SIZE?=?120;
          ???????? int ?nh? = ?(nw? * ?h)? / ?w;
          ????????
          if (?nh > IMAGE_SIZE?)? {
          ????????????nh?
          = ?IMAGE_SIZE;
          ????????????nw?
          = ?(nh? * ?w)? / ?h;
          ????????}

          ????????
          double ?sx? = ?( double )nw? / ?w;
          ????????
          double ?sy? = ?( double )nh? / ?h;


          ????????transform.setToScale(sx,sy);
          ????????AffineTransformOp?ato?
          = ? new ?AffineTransformOp(transform,? null );
          ????????BufferedImage?bid?
          = ? new ?BufferedImage(nw,?nh,?BufferedImage.TYPE_3BYTE_BGR);
          ????????ato.filter(bis,bid);
          ????????ImageIO.write(bid,?
          " jpeg " ,?fo);
          ????}
          ? catch (Exception?e)? {
          ????????e.printStackTrace();
          ????????
          throw ? new ?RuntimeException( " Failed?in?create?preview?image.?Error:? " ? + ?e.getMessage());
          ????}

          }


          posted on 2006-08-17 10:28 溫柔一刀 閱讀(858) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 開(kāi)源框架
          聯(lián)系偶 zhupanjava@gmail.com 溫柔一刀
          主站蜘蛛池模板: 延川县| 都江堰市| 若羌县| 图木舒克市| 梨树县| 株洲市| 商南县| 略阳县| 三河市| 宁河县| 柳林县| 彰化市| 齐河县| 东莞市| 松溪县| 盐源县| 乌鲁木齐市| 溧阳市| 嘉峪关市| 内黄县| 凤阳县| 鞍山市| 开远市| 驻马店市| 定安县| 临武县| 什邡市| 牡丹江市| 临泽县| 文安县| 洛南县| 宜川县| 瑞昌市| 东乌珠穆沁旗| 寿光市| 湾仔区| 鹿泉市| 兰溪市| 香格里拉县| 额济纳旗| 龙门县|