grails 用の HDImageService プラグインを使用して、ユーザーがアップロードする画像をスケーリングするための重労働を行っています。Amazon S3 バケットに保存する ImageService.groovy を作成しました。すべて正常に動作し、ユーザーがファイルを選択し、公開をクリックすると、画像がスケーリング、保存、表示されます。私の問題は、ユーザーが画像以外のファイルをアップロードすることを制限する方法がわからないことです。タイプが jpeg、jpg、gif、または png のファイルのみをアップロードできるようにしたいと思います。これらの変数を使用して ENUM クラスを作成しましたが、実装する場所や方法がわかりません。誰でも私を正しい方向に向けることができますか
RegistrationController.groovy: ファイルを取得してバケットに保存する
if ( params.photo ) {
MultipartFile file = request.getFile( 'photo' )
byte[] fileBytes = file.bytes
ByteArrayInputStream bais = new ByteArrayInputStream( fileBytes )
BufferedImage image = ImageIO.read( bais )
def width = image.width
def height = image.height
def maxWidth = 500
// Calculate the ratio that we will need to resize the image
double ratio = 1.0f
if ( width > maxWidth ) {
def r = maxWidth / width
ratio = r < 1.0f ? r : 1.0f
bais.reset()
fileBytes = hdImageService.scale( bais, maxWidth, Math.round( height * ratio ) as int )
}
geolink.custPhoto = imageService.storeS3Image(
imageService.buildPPJPhotoPath( geolink, file.getOriginalFilename() ),
fileBytes,
file.contentType
)
}
ImageService.groovy: 列挙型
String getFormatName( byte[] raw ) {
try {
// Create an image input stream on the image
ImageInputStream iis = ImageIO.createImageInputStream( new ByteArrayInputStream( raw ) )
// Find all image readers that recognize the image format
Iterator iter = ImageIO.getImageReaders(iis)
if (!iter.hasNext()) {
// No readers found
log.debug( "Unable to get format" )
return null;
}
// Use the first reader
ImageReader reader = (ImageReader)iter.next()
// Close stream
iis.close()
// Return the format name
log.debug( "Format: ${reader.getFormatName() }" )
return reader.getFormatName()
}
catch (IOException e) {
log.warn( "Unable to determine image format", e )
}
// The image could not be read
return null;
}
ImageFormat getContentType( String filename ) {
String[] parts = filename.split( '\\.' )
return ImageFormat.valueOf( parts[parts.length - 1].toUpperCase() )
}}
public enum ImageFormat {
JPEG( 'image/jpeg', 'jpg' ),
JPG( 'image/jpeg', 'jpg' ),
PNG( 'image/png', 'png' ),
GIF( 'image/gif', 'gif' )
String mimeType
String extension
public ImageFormat( String mime, String ext ) {
this.mimeType = mime
this.extension = ext
}
}