2016-09-14 7 views
0

jspで画像をロードしたいのですが、コントローラメソッドを呼び出しています。「http://localhost:8080/SocialNetworkingApp/imageController/life.jpg.doが失敗しましたリソースをロードする:サーバーは406(Not Acceptable)のステータスで応答しました。私は@PathVariableを使って画像を取得しています。@PathVariableアノテーションと* .doのURLパターンを使用して.jpg形式の画像ファイルを取得する

次は私のコードです: -

私は私のコントローラで

<c:forEach items="${post.imageNames}" var="imageObj"> 
     <img src="/SocialNetworkingApp/imageController/${imageObj}.do" alt="image_post"/> 
    </c:forEach> 

を使用していますJSP内で次のように、私は、要求のマッピングを行っています。私のweb.xmlに

@RequestMapping(value="/imageController/{imageName}",produces = { MediaType.IMAGE_JPEG_VALUE,MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_PNG_VALUE }) 
    @ResponseBody 
    public Raster getImageForPost(@PathVariable String imageName){ 
     LOG.info("Entry :: getImageForPost"); 
     BufferedImage bufferedImageForPost = null; 
     final org.springframework.http.HttpHeaders headers = new org.springframework.http.HttpHeaders(); 
     try{ 
      headers.setContentType(MediaType.IMAGE_JPEG); 
      LOG.info("imageName-->"+imageName); 
      File imageFromMongo = new File(IMAGE_FROM_PATH+imageName); 
      GridFSDBFile imageFile=MongoUtility.getImageFileFromMongo(imageName); 
      imageFile.writeTo(imageFromMongo); 
      bufferedImageForPost=ImageIO.read(imageFromMongo); 

     } 
     catch(IOException e){ 
      LOG.error("Error :: while fetching image from the GridFs post",e); 
     } 

     LOG.info("Exit :: getImageForPost"); 
     return bufferedImageForPost.getData(); 
    } 

、私はURLパターンに私のサーブレットをマッピングしています* .doという

<servlet> 
    <servlet-name>socialDispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>socialDispatcher</servlet-name> 
    <url-pattern>*.do</url-pattern> 
    </servlet-mapping> 

特定のパスにイメージを保存するためのコントローラのコードは正常に動作しますが、でていますjspに画像ファイルを送信するときに、エラーが発生しています。 * .jpgファイルは魅力的だと思います。gettinh * .jpg.doファイルです。 何か助けていただければ幸いです。

ありがとうございました。

答えて

0

MultipartFileは通常、ファイル/画像のアップロードに使用されます。以下のように使用してください。

@RequestMapping(value="/uploadfile", method = RequestMethod.POST) 
    public @ResponseBody String uploadFile(
      @RequestParam("file") MultipartFile file){ 
     String message = ""; 

     if (!file.isEmpty()) { 
      try {     
       byte [] bytes = file.getBytes();     
       //logic to persist the file     
       message = "You successfully uploaded " + file.getName() + "!"; 
      } catch (Exception e) { 
       message = "You failed to upload " + file.getName() + " => " + e.getMessage(); 
      } 
     } else { 
      message = "You failed to upload " + file.getName() + " because the file was empty."; 
     } 
     file = null; 
     return message; 
    } 
+0

実際に私は質問をうまく伝えていないと思います。私はファイルをアップロードする際に問題に直面していません。 ファイルをデータベース(Mongo)に保存しました。イメージをフェッチしてjspに表示する必要があります。 しかし、考えているのは、1つ以上の画像があるということです。 <:forEachの項目= "$ {post.imageNames}" VAR = "imageObj" C> image_post だから、だから、私は のimgタグのsrcからコントローラにしたいフライ.IEでそれを取得したいです私はこのように使ったのです。しかし、いくつかの "非受け入れエラー406"が来ています。 – Shreekanth

0

問題が解決されましたので、他の人に役立つ可能性があります。 問題は戻り型で、Rasterではなく戻り値の型はbyte []配列でなければなりません。 戻り値の型をbyte []配列に変更すると、正常に動作し始めました。

関連する問題