1
我正在使用HDImageService插件for grails來完成縮放用戶上傳的圖像的繁重工作。我創建了ImageService.groovy以保存到我的Amazon S3存儲桶。一切工作正常,用戶選擇文件,點擊發布和wahla圖像縮放,存儲和顯示。我的問題是,我不知道如何限制用戶上傳圖片以外的文件。我只想允許上傳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
}
}
謝謝格雷格。當我釋放一些時間時,我會試一試。 –