1

私は、休憩サービスで次のリクエストパラメータを受け取るサービスコールを作成したいと考えています。このメソッドはファイルをイメージサーバーにアップロードします。ファイルをディスクに保存せずにBufferedImageをMultiPartファイルに変換するには?

@RequestMapping(value = "/upload", method = RequestMethod.POST) 
    public ResponseEntity<String> uploadFile(
      @RequestParam("file") MultipartFile file) { 

次のサービスへの呼び出しが行われているコードです - あなたが見ることができるように私は、画像のURL

 BufferedImage subImage= ImageIO.read(new URL(<some image url goes here>)); 
    File outputFile = new File("C:\\" + "myimage" + ".jpg"); 

    ImageIO.write(subImage, "jpg", outputFile); 

    MultiValueMap<String, Object> body = new LinkedMultiValueMap<String, Object>(); 
    String url="http://serviceurl/upload"; 

    body.add("file", outputFile); 

    HttpHeaders headers = new HttpHeaders(); 
    headers.setContentType(MediaType.MULTIPART_FORM_DATA); 

    HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<MultiValueMap<String, Object>>(body, headers); 

    restTemplate.exchange(url, HttpMethod.POST, entity, String.class); 

からBufferedImageオブジェクトで画像を読み込むと、ファイルが最初にされています作成してディスクに保存します。この手順を回避して、BufferedImageオブジェクトを使用するだけで(ファイルをローカルディスクに保存したくない)方法を教えてください。

以下の解決方法を試してみましたが、ディスクにファイルを保存せずにこれを達成できないようです。本当?

+1

はMultipartFileは 'org.springframework.web.multipart.MultipartFile'からですか? – Jobin

答えて

2

私はMultipartFileの実装クラスを作成しました。私はMultipartFileファイルを作成するために新しく作成したクラスを使用しています。

MultipartFile実装のJPGを変換

public class MultipartImage implements MultipartFile { 


private byte[] bytes; 
String name; 
String originalFilename; 
String contentType; 
boolean isEmpty; 
long size; 

public MultipartImage(byte[] bytes, String name, String originalFilename, String contentType, 
     long size) { 
    this.bytes = bytes; 
    this.name = name; 
    this.originalFilename = originalFilename; 
    this.contentType = contentType; 
    this.size = size; 
    this.isEmpty = false; 
} 

@Override 
public String getName() { 
    return name; 
} 

@Override 
public String getOriginalFilename() { 
    return originalFilename; 
} 

@Override 
public String getContentType() { 
    return contentType; 
} 

@Override 
public boolean isEmpty() { 
    return isEmpty; 
} 

@Override 
public long getSize() { 
    return size; 
} 

@Override 
public byte[] getBytes() throws IOException { 
    return bytes; 
} 

@Override 
public InputStream getInputStream() throws IOException { 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public void transferTo(File dest) throws IOException, IllegalStateException { 
    // TODO Auto-generated method stub 

} 
} 

からMultipartFile

BufferedImage originalImage = ImageIO.read(new File("path to file")); 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
ImageIO.write(originalImage, "jpg", baos); 
baos.flush(); 

MultipartFile multipartFile = new MultipartImage(baos.toByteArray()); 

OR

あなたがorg.springframework.mock.web.MockMultipartFileを使用することができ、独自のMultipartFileクラスの実装を作成したくない場合はスピンからグラム

例:

MultipartFile multipartFile = MockMultipartFile(fileName, baos.toByteArray()); 
+0

私は、multipartFileオブジェクトが作成された後にフラッシュが発生すると思います。 – Tisha

+0

実際には完全にテストした後、これは動作していないようです。私は400の悪い要求エラーを受け取ります – Tisha

+0

私はこのコードで呼び出されている上記のサービスはないと思います。 – Tisha

関連する問題