0

私のwebappにいくつかの写真のアップロードを実装しようとしています。私が抱えている問題は、Imagescalr を使用して元の写真のサムネイルを作成しようとしていて、AWS プラグインを使用してそれらをバケットにアップロードしようとしていることです。だから、私が持っているコードは次のとおりです:(削除​​された検証と、質問/可能な答えに影響を与えないもの)

def uploadPic() {
def f = request.getFile('file')
.   
.
.       
def s3file = f.inputStream.s3upload(filename) { //this is for the normal photo
            path "POI/ID/"
    }

def imageIn = ImageIO.read(???); //Dont know if I can put the f file here as parameter... do I have to store it somewhere first, call the s3 file, or I can resize on - the - fly?
BufferedImage scaledImage = Scalr.resize(imageIn, 150);



//Here I should upload the thumb. How can I call something like what is done for the normal photo? 

したがって、問題/質問はコードに沿って説明されています。誰かがこれを行う方法を知っていることを願っています. 前もって感謝します。

4

1 に答える 1

2

Grails では、request.getFile() は java.io.File オブジェクトを返しません。入力ストリームを使用してファイルを書き出すこともできますが、サービスを使用してもう少し細かく分割することはできますが、おそらくこのようなことを行うでしょう。しかし、これで正しい方向に進むはずです。これは疑似コード ワークフローの提案と考えてください。

def uploadPic() {

   def f = request.getFile('file')
   def tempFile = new File('/some/local/dir/myImage.png') 
   f.transferTo(tempFile)

   // upload the original image to S3
   whateverApi.s3Upload(tempFile)

   def bufferedImage = ImageIO.read(tempFile)
   def scaledBufferedImage = Scalr.resize(bufferedImage, 150)

   // write the scaledImg to disk
   def scaledImage = new File('/some/local/dir/myImage-150.png');
   ImageIO.write(scaledBufferedImage, "png", scaledImage);

   //upload scaled image to S3
   whateverApi.s3Upload(scaledImage)

   // clean up
   tempFile.delete()
   scaledImage.delete()

}
于 2013-09-28T18:56:16.703 に答える