1

できます:

ビュー (GSP):

<g:uploadForm action="upload">
    <input type="file" name="myImageFile" />
    <input type="submit" />
</g:uploadForm>

コントローラ:

def destination = "D:\\someFolder\\image.jpg";
def f = request.getFile('myImageFile')
f.transferTo(new File(destination))
response.sendError(200, 'Done')

しかし、常にJPG画像に変換したいです。だから私は試しました:

def destination = "D:\\someFolder\\image.jpg";
PlanarImage inputfile = JAI.create("FileLoad", f);
JAI.create("filestore",inputfile,destination,"JPEG");

これはエラーです:

FileLoad - パラメーター値クラス (org.springframework.web.multipart.commons.CommonsMultipartFile) は、パラメーター「filename」のパラメーター クラス (java.lang.String) のインスタンスではありません。スタックトレースは次のとおりです。

これまでのところ、私が持っている唯一の解決策は、画像であるかどうかを確認した後、通常どおり画像を保存することです(@ james-kleehに感謝します)。次に、それを JAI.create でロードして処理を行います。最後に元の画像を削除します。

また、アップロードされたファイルが画像かどうかを確認するにはどうすればよいでしょうか。

4

2 に答える 2

1

GSP コードは、質問に投稿したものと同じです。

コントローラーのコードは次のようになります。

import javax.media.jai.*;
...

def f = request.getFile('myFile')
    def okContentTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']

if (!okContentTypes.contains(f.getContentType())) { 
    // TODO Tell user: "Image type must be one of: ${okContentTypes}"
}

else {
    def destination = "D:\\someFolder\\image.jpg";
    byte[] source = f.bytes;
    SeekableStream inputStream = new ByteArraySeekableStream(source);
    RenderedOp image = JAI.create("stream", inputStream)
    JAI.create("filestore",image,destination,"JPEG"); // Destination directory must exist (D:\someFolder\)
}

誰かの役に立てば幸いです!

于 2013-08-07T01:03:06.210 に答える
0

次のコントローラー側のコードを使用して、アップロードされた画像をアプリケーションの外部に保存します。

def f = request.getFile('myFile')
def okContentTypes = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']

if (!okContentTypes.contains(f.getContentType())) { 
    //TODO Tell user: "Image type must be one of: ${okContentTypes}"
} else {
    def destination = "/opt/jft/profileImages"  //path to dir where images will be saved. In my case profileImages is the destination dir.
    File dir = new File(destination)
    dir.mkdirs()
    f.transferTo(new File(dir, f.getOriginalFilename()))
}

ここでは、既存の宛先ディレクトリは必要ありません。存在しない場合は、プログラムによって作成されます。

于 2013-08-09T17:46:03.577 に答える