将Play框架文件上载发送到Amazon S3

时间:2017-11-07 14:38:17

标签: java amazon-s3 playframework

我有一个目前托管在Heroku上的Play(版本1.4)应用程序,可让用户创建像eBay一样的拍卖物品。主要过程是用户填写表格,其中包含有关正在上传的照片的信息。提交表单时,信息存储在数据库中。但是,我希望使用亚马逊的S3服务存储照片。成功时,创建拍卖项目的页面将定向到一个页面,该页面显示包含刚刚上传的信息的图像。

我可能已超过一半,因为当我的表单提交时,图像已成功发送到我使用S3为其创建的存储桶。这是个好消息。坏消息是,提交后,应用程序崩溃了,我得到了“哎呀!”错误页面,当我检查我的数据库时,没有保存任何信息。负责创建新拍卖项的方法,doCreateItem(),我刚刚描述的过程,我可以将照片发送到AWS,但应用程序崩溃没有将数据保存到数据库,该方法如下所示:

public static void doCreateItem(@Valid AuctionItem item){
    if (validation.hasErrors()){
    params.flash();
    validation.keep();
    createAuctionItem();    
    }
    // item.photo = new S3Blob();
    // item.photo.set(new FileInputStream(item.photo), MimeTypes.getContentType(item.photo.getName()));
    item.createdBy = Authenticate.getLoggedInUser();
    item.save();
    show(item.id);
}

https://github.com/cmazzochi81/java-play-app/blob/master/app/controllers/Application.java

堆栈跟踪,如下所示: enter image description here

在引用此错误时的堆栈跟踪中:

Execution exception (In /app/controllers/Application.java around line 43)

我的代码中的第43行是该方法尝试将数据保存到数据库的以下行:

item.save();

现在,当我取消注释doCreateMethod()

中的两行时
item.photo = new S3Blob();
item.photo.set(new FileInputStream(item.photo)

当我这样做时,我甚至无法将我的应用程序推送到Heroku。控制台中的错误表示构造函数FileInputStream(S3Blob)未定义:

enter image description here 我想尝试詹姆斯沃德在本文中做的完全相同的事情: https://www.jamesward.com/2011/09/13/sending-play-framework-file-uploads-to-amazon-s3

我的项目的GitHub回购可以在这里找到: https://github.com/cmazzochi81/java-play-app

非常感谢您的协助。我在这个项目上非常努力,而且这很接近完成。

提前谢谢你, CM

0 个答案:

没有答案