我有一个目前托管在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
在引用此错误时的堆栈跟踪中:
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)未定义:
我想尝试詹姆斯沃德在本文中做的完全相同的事情:
https://www.jamesward.com/2011/09/13/sending-play-framework-file-uploads-to-amazon-s3
我的项目的GitHub回购可以在这里找到: https://github.com/cmazzochi81/java-play-app
非常感谢您的协助。我在这个项目上非常努力,而且这很接近完成。
提前谢谢你, CM