2017-06-14 13 views
0

400を返すGET:春ブート要求、私は次のように画像をアップロードするための私のポストの要求を持っている画像

@RequestMapping(method = RequestMethod.POST, value = BASE_PATH) 
public ResponseEntity<?> createFile(@RequestParam("file") MultipartFile file, HttpServletRequest servletRequest){ 

    URI localUri = null; 
    try{ 
     imageService.createImage(file); 
     final URI localhostUri = new URI(servletRequest.getRequestURL().toString() + "/") 
             .resolve(file.getOriginalFilename() + "/raw"); 

     localUri = localhostUri; 

    }catch (IOException e){ 
     return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR) 
         .body("Could not upload " + file.getOriginalFilename() + "=>" + e.getMessage()); 
    }catch (URISyntaxException e) { 
     e.printStackTrace(); 
    } 
    return ResponseEntity.created(localUri) 
      .body("Successfully Uploaded " + file.getOriginalFilename()); 
} 

そして次は、一度に画像を取り込むためのGETメソッドである:

@RequestMapping(method = RequestMethod.GET, value = BASE_PATH + "/" + FILENAME + "/raw") 
@ResponseBody 
public ResponseEntity<?> oneRawImage(@PathVariable String filename){ 

    try{ 
     Resource file = imageService.findOneImage(filename); 
     return ResponseEntity.ok() 
       .contentLength(file.contentLength()) 
       .contentType(MediaType.IMAGE_JPEG) 
       .body(new InputStreamResource(file.getInputStream())); 
    }catch (IOException e){ 
     return ResponseEntity.badRequest() 
          .body("Couldn't Find" + filename + "=>" + e.getMessage()); 
    } 

} 

POSTを実行すると、ファイルがアップロードされたことを示す適切な応答が得られます(返信要求がtryブロック外にあるため、わかりません)。以下は応答です。

* Trying ::1... 
* Connected to localhost (::1) port 8080 (#0) 
> POST /images HTTP/1.1 
> Host: localhost:8080 
> User-Agent: curl/7.49.0 
> Accept: */* 
> Content-Length: 69927 
> Expect: 100-continue 
> Content-Type: multipart/form-data; boundary=------------------------ 
b5f1ef58e19bbb8d 
> 
< HTTP/1.1 100 
< HTTP/1.1 201 
< Location: http://localhost:8080/images/image2.jpg/raw 
< Content-Type: text/plain;charset=UTF-8 
< Content-Length: 32 
< Date: Wed, 14 Jun 2017 18:24:06 GMT 
< 
* Connection #0 to host localhost left intact 
Successfully Uploaded image2.jpg 

しかし、私は投稿画像を取得するためのGETリクエストを実行しようとするとき、私は次のエラーが表示されます

Couldn't Findimage2.jpg=>ServletContext resource [/fileupload-dir/image2.jpg] cannot be resolved to URL because it does not exist 

私は複数の方法でデバッグを試みたが、成功しませんでした。バネの助けがあれば幸いです!ありがとう

+1

は '/ fileupload-dir /'が正しくマップされていますか?提供されたコードからはわかりません - あなたのメソッドは '../ raw'にマップされているようです。 – ochi

+0

@ochiこれは面白いです、findOneImageサービスメソッドで、私は実際にresourceLoader.getResource(" file: "+ UPLOAD_ROOT + "/" +ファイル名)。私は「:」の使用を正確に理解していませんでしたが、問題がどこにあるのかを理解していました。 – Omkar

+1

あなたの質問タイトルは誤解を招いています...タイトルには404(リソースが見つかりませんでした)が表示されていますが、実際には400(悪いリクエスト)が届いています - 今私たちは理由を知っています... – ochi

答えて

0

私は問題がかなり気晴らしであることに気がついた。サービスメソッドが呼び出されています:

public Resource findOneImage(String filename){ 
    return resourceLoader.getResource("file:" + UPLOAD_ROOT + "/" + filename); 
} 

「ファイル」にコロンがありませんでした。したがって、resourceLoaderは正しいURLに解決されませんでした。

関連する問題