2013-09-28 3 views
0

Я пытаюсь реализовать загрузку некоторых фотографий в мой webapp. Проблема, связанная с тем, что я пытаюсь использовать Imagescalr для создания превью исходных фотографий, а Im использует AWS Plugin для загрузки их в мое ведро. Таким образом, код, который я есть следующая: (удалено валидация и вещи, которые влияют на DonT вопрос/ответ) ВозможногоImageScalr + Grails + 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? 

поэтому проблемы/вопросы разъясняются по коде, надеюсь, кто-то знает, как это сделать это. Заранее спасибо.

ответ

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() 

} 
Смежные вопросы