显示导航

如何使用365bet地区上传文件

了解如何使用365bet地区上传文件并将其传输到文件夹中,将其保存为数据库中的字节或上传到AWS S

s塞尔吉奥·德尔阿莫

365bet地区版本 4.0.1

365bet地区培训

365bet地区培训由创建并积极维护365bet地区框架的人们开发和交付

入门

在本指南中,您将编写三种不同的域类,此外,还将编写控制器服务以及与它们相关的视图

我们将探索将上传的文件字节保存在数据库本地文件夹或远程服务器AWS S中的不同方法

我们将使用命令对象仅允许上传JPG或PNG图片

您将需要什么

要完成本指南,您将需要以下内容

  • 花些时间在你手上

  • 体面的文本编辑器或IDE

  • 安装了JDK或更高版本JAVA首页适当配置

如何完成指南

要开始,请执行以下操作

要么

365bet地区指南存储库包含两个文件夹

  • 初始初始项目通常是一个简单的365bet地区应用程序,其中包含一些其他代码,可以帮助您快速入门

  • 完成一个完整的示例它是按照指南中介绍的步骤进行操作并将这些更改应用于文档的结果。初始

要完成指南,请转到初始

  • 光盘进入grails指南grails上传文件初始

并按照下一节中的说明进行操作

您可以直接前往完成的例子如果你光盘进入grails指南grails上传文件完成

编写申请

初始文件夹包含使用创建的365bet地区应用程序网络配置文件它具有几个Controllers GORM数据服务域类和一个简单的CRUD接口,使用普遍优惠制s它是一个列出旅游资源,酒店,餐厅和景点的应用程序

在接下来的部分中,您将向应用程序添加功能,这些资源中的每一个都可能包含精选图片

  • 对于餐厅,我们将图像字节直接存储在域类中

  • 对于兴趣点,我们将文件传输到文件夹

  • 对于酒店,我们将文件上传到AWS S

特色图像命令对象

我们的每个应用实体,饭店,餐厅和景点都会有特色图片

为了封装上传文件的验证,我们使用365bet地区命令对象

grails应用程序控制器示例grails FeaturedImageCommand groovy
例子进口 grails验证有效
进口 组织springframework网站multipart MultipartFile

 FeaturedImageCommand 实施可验证的MultipartFile FeaturedImageFilelongID整数静态的约束ID可为空: 可为空: FeaturedImageFile验证器值对象如果小时空值 ) {
                返回 
            }
            如果空值返回 
            }

            ['jpeg', 'jpg', 'PNG'任何扩展(1)val originalFilename toLowerCase结尾于扩展名
1 只允许以JPG或PNG结尾的文件

增加允许的文件大小

365bet地区的默认文件大小为KB

我们将允许上传MB文件

个字节

grails应用配置会议应用yml
:
 控制器:
  上载:
    maxFileSize: 26214400
    maxRequestSize: 26214400

餐厅上传并另存为字节

本指南的这一部分说明了如何将文件上传到365bet地区服务器应用程序并将文件的字节存储在数据库中

字节数组

餐厅领域类别

修改餐厅域类添加两个属性FeaturedImageBytesFeaturedImageContentType.

grails应用程序域示例grails Restaurant groovy
例子 餐厅 {
    那么字节[]FeaturedImageBytes(1)
    FeaturedImageContentType(2)

    静态的约束featuresImageBytes可为空: 真正FeaturedImageContentType可为空: 真正
    }

    静态的映射FeaturedImageBytes: '特色图片字节', sqlType: '长毛' (3)
    }
}
1 使用域类属性将图像的字节存储在数据库中
2 内容图像类型E g图像jpeg
3 图像可能是大文件,我们使用映射闭包配置sqlType

餐厅景观

我们将略微修改视图,以包含可以上传特色图片的功能

在餐厅列表中,仅在表格中显示餐厅名称。字段插件表文件资料

grails应用查看餐厅索引gsp
<F表集合"${}"属性"那么"/>

编辑和创建表单将不允许用户设置特色图片的内容类型或字节

grails应用视图餐厅创建gsp
<F全豆"餐厅"除了"FeaturedImageBytes FeaturedImageContentType"/>
grails应用程序视图餐厅修改gsp
<F全豆"餐厅"除了"FeaturedImageBytes FeaturedImageContentType"/>

在表演餐厅页面中,添加一个按钮,将用户带到特色图像编辑页面

grails应用视图餐厅显示gsp
<G链接="编辑" 行动="editFeaturedImage"资源"${这个餐厅}"><G讯息码"餐厅特色图片网址编辑标签" 默认="编辑特色图片" /></g连结

修改餐厅控制器editFeaturedImage管制员的行动

grails应用程序控制器示例grails RestaurantController groovy
定义 editFeaturedImage(longid餐厅餐厅restaurant DataService获取ID如果找不到餐厅餐厅餐厅

editFeaturedImageGSP与编辑GSP,但它使用g uploadForm代替g形式

grails应用程序视图餐厅editFeaturedImage gsp
<GuploadForm名称"uploadFeaturedImage"行动"uploadFeaturedImage">
    <GhiddenField名称"ID""${这个餐厅编号}" />
    <GhiddenField名称"""${这个餐厅版本}" />
    "文件"那么"FeaturedImageFile" />
    
="纽扣"> <输入 ="保存" 类型="提交""${信息: '餐厅特色图片上传标签', 默认: '上载')}" /> </场集 </g uploadForm

上传特色图片服务

uploadFeatureImage控制器的操作使用前面描述的命令对象来验证上传表单的提交。如果未找到验证错误,它将调用一个Gorm数据服务.

grails应用程序控制器示例grails RestaurantController groovy
    定义 uploadFeaturedImageFeaturedImageCommand cmd如果指令空值未找到返回
        }

        如果cmd hasErrors响应cmd错误模型: [餐厅指令视图: 'editFeaturedImage')
            返回餐馆餐馆restaurantDataService更新cmd id cmd版本cmd FeaturedImageFile字节cmd FeaturedImageFile contentType如果餐厅空值未找到返回
        }

        如果餐厅hasErrors响应餐厅错误模型: [餐厅餐厅视图: 'editFeaturedImage')
            返回
        }

        当地区域设置请求区域设置Flash消息crudMessageService消息CRUD UPDATE domainName区域设置cmd id区域设置重定向餐厅

以下代码段显示了完整的GORM数据服务

grails应用程序服务示例grails RestaurantDataService groovy
例子进口 grails gorm services服务

服务餐厅接口RestaurantDataService餐厅获取longID清单清单地图args计数虚空删除可序列化id餐厅更新可序列化IDlong名称餐厅更新可序列化IDlong字节[]FeaturedImageBytesFeaturedImageContentType(1)节省餐厅那么
1 第一个参数应该是要更新的对象的ID。如果任何参数与领域类的属性都不匹配,则会发生编译错误

加载字节数组图像

在中创建动作餐厅控制器呈现餐厅特色图片

grails应用程序控制器示例grails RestaurantController groovy
定义 FeaturedImage(longid餐厅餐厅restaurant DataService获取ID如果餐厅餐厅特色ImageBytes空值未找到返回渲染文件餐厅特色图片内容类型餐厅特色图片内容类型

使用g createLinkGSP标签可引用之前的控制器操作img src属性

grails应用视图餐厅显示gsp

<F展示豆"餐厅"属性"那么" /></H <G:如果测试"${这个餐厅特色图片}"> ""餐厅"行动"FeaturedImage"ID"${这个餐厅编号"/>"宽度"400"/> </g如果

兴趣点上传和传输

365bet地区在本指南的这一部分中,我们将365bet地区应用程序与上传的图像分开了,我们使用曼普在指向文件夹数据的端口上运行本地apache服务器

传递

兴趣点域类

修改Pinto字体st域类添加属性FeaturedImageUrl

grails应用程序域示例grails PointOfInterest常规
例子 Pinto字体st {
    那么FeaturedImageUrl(1)

    静态的约束featuresImageUrl可为空: 真正
    }
}
1 使用此属性保存可在其中检索图像的URL

兴趣点视图

我们将略微修改GSP视图,使其包含可以上传精选图片的功能

在“兴趣点”列表中,仅在表格中显示酒店名称。字段插件表文件资料

grails应用程序视图pointOfInterest索引gsp
<F表集合"${绘画乐趣}"属性"那么"/>

编辑和创建表单将不允许用户设置特色图片的网址

grails应用程序视图pointOfInterest创建gsp
<F全豆"Pinto字体st"除了"FeaturedImageUrl"/>
grails应用程序视图pointOfInterest编辑gsp
<F全豆"Pinto字体st"除了"FeaturedImageUrl"/>

相反,我们添加了一个按钮,可将用户带到特色图片编辑页面

grails应用程序视图pointOfInterest显示gsp
<G链接="编辑" 行动="editFeaturedImage"资源"${这个Pinto字体st}"><G讯息码"pointOfInterest FeatureImageUrl编辑标签" 默认="编辑特色图片" /></g连结

修改油漆和图片控制添加一个名为的控制器动作editFeaturedImage:

grails应用程序控制器示例grails PointOfInterestController groovy
定义 editFeaturedImage(longid PointOfInterest pointOfInterest pointOfInterestDataService获取ID如果未找到pointOfInterest返回
    }
    [Pinto字体stPinto字体st

editFeaturedImageGSP与编辑GSP,但它使用g uploadForm代替g形式

grails应用程序视图pointOfInterest editFeaturedImage gsp
<GuploadForm名称"uploadFeaturedImage"行动"uploadFeaturedImage">
    <GhiddenField名称"ID""${这个pointOfInterest ID}" />
    <GhiddenField名称"""${这个pointOfInterest版本}" />
    "文件"那么"FeaturedImageFile" />
    
="纽扣"> <输入 ="保存" 类型="提交""${信息: 'pointOfInterest FeaturedImage上传标签', 默认: '上载')}" /> </场集 </g uploadForm

上传特色图片服务

uploadFeatureImage控制器的操作使用前面描述的命令对象来验证上传表单的提交。如果未找到验证错误,它将调用服务

grails应用程序控制器示例grails PointOfInterestController groovy
定义 uploadFeaturedImageFeaturedImageCommand cmd如果cmd hasErrors响应cmd模型: [Pinto字体st指令视图: 'editFeaturedImage')
        返回PointOfInterest pointOfInterest uploadPointOfInterestFeaturedImageService uploadFeatureImage cmd如果Pinto字体st空值未找到返回
    }

    如果pointOfInterest hasErrors响应pointOfInterest模型: [Pinto字体stPinto字体st视图: 'editFeaturedImage')
        返回
    }

    当地区域设置请求区域设置Flash消息crudMessageService消息CRUD UPDATE domainName区域设置pointOfInterest ID区域设置重定向pointOfInterest

我们配置本地服务器url,它将托管上载的图像以及要将图像保存到的本地文件夹路径。

grails应用配置会议应用yml
:
    导游:
        cdnFolder: /用户数/365bet地区sdelamo网站365bet地区Guides UploadFilescdnRootUrl: http:本地主机

服务使用transferTo将文件传输到本地文件路径的方法如果发生错误,服务将删除先前已传输的文件

grails应用程序服务示例grails UploadPointOfInterestFeaturedImageService groovy
例子进口 grails config配置
进口 grails核心支持365bet地区ConfigurationAware
进口 常规转换CompileStatic

禁止警告('365bet地区S​​tatelessService')
静态编译
 UploadPointOfInterestFeaturedImageService 实施G-是Konfgurachi Onare na Pinto Funeret st Pinto Funeret stcdnFoldercdnRootUrl覆写
    虚空setConfiguration Config co cdnFolder co getRequiredProperty'grails指南cdnFolder'cdnRootUrl co getRequiredProperty'grails指南cdnRootUrl')
    }

    禁止警告('JavaIoPackageAccess'PointOfInterest uploadFeatureImage FeaturedImageCommand cmd文件名cmd FeaturedImageFile originalFilenamefolderPath"${cdnFolder}Pinto字体st${cmd ID}"
        文件 文件folderPath如果文件夹存在文件夹mkdirs路径"${folderPath}/${文件名}"cmd FeaturedImageFile transferTo 文件路径FeaturedImageUrl"${cdnRootUrl}Pinto字体st${cmd ID}/${文件名}"PointOfInterest poi pointOfInterestDataService updateFeaturedImageUrl cmd id cmd版本FeaturedImageUrl如果然后hasErrors文件F 文件路径f然后删除

服务更新FeaturedImageUrl在GORM数据服务的帮助下

grails应用程序服务示例grails PointOfInterestDataService groovy
例子进口 grails gorm services服务

禁止警告(['线长', '未使用的变量', 'OpenAfterBrace之后的空格', 'SpaceBeforeClosingBrace'])
服务Pinto字体st接口油漆和图片圣。longID清单清单地图args计数虚空删除可序列化id PointOfInterest保存名称PointOfInterest updateName可序列化IDlong名称PointOfInterest updateFeaturedImageUrl可序列化IDlongFeaturedImageUrl

酒店上传到AWS S

对于旅馆域类,我们将文件上传到亚马逊AWS S.

s

修改你建立gradle文件

建立gradle
仓库Maven URL'http dl bintray com agorapulse库'依赖项编译"org grails插件aws sdk s$awsSdkS版本"编译"com amazonaws ok java sdk s"
}

限定awsSdkS版本gradle属性

gradle属性
grails版本4.0.1gormVersion7.0.2释放hibernateCoreVersion5.4.0最终版3.2htmlunitDriverVersion2.47.1htmlunitVersion2.35.0assetPipelineVersion3.0.11awsSdkS版本2.2.4

我们将把您的文件上传到已经存在的存储桶中

grails应用配置会议应用yml
:
    外挂程式:
        awssdk:
            s:
                区域我向西1
                grails指南

酒店领域类别

修改旅馆域类添加两个属性FeaturedImageKeyFeaturedImageUrl

grails应用程序域示例grails Hotel groovy
例子 旅馆 {

    那么FeaturedImageUrl(1)
    FeaturedImageKey(2)

    静态的约束featuresImageUrl可为空: 真正FeaturedImageKey可为空: 真正
    }
}
1 我们存储特色图片的AWS S URL
2 我们存储文件路径,必要时可用于删除文件

酒店景观

我们将略微修改视图,以包含可以上传特色图片的功能

在“酒店”列表中,仅在表格中显示酒店的名称。字段插件表文件资料

grails应用程序浏览酒店索引gsp
<F表集合"${酒店列表}"属性"那么"/>

编辑和创建表单将不允许用户设置特色图片的网址

grails应用程序视图酒店创建gsp
<F全豆"旅馆"除了"FeaturedImageUrl FeaturedImageKey"/>
grails应用程序视图酒店编辑gsp
<F全豆"旅馆"除了"FeaturedImageUrl FeaturedImageKey"/>

相反,我们添加了一个按钮,可将用户带到特色图片编辑页面

grails应用程式浏览酒店显示gsp
<G链接="编辑" 行动="编辑"资源"${这个旅馆}"><G讯息码"默认按钮编辑标签" 默认="编辑" /></g连结

修改酒店控制器添加一个名为的控制器动作editFeaturedImage:

grails应用程序控制器示例grails HotelController groovy
定义 editFeaturedImage(longid酒店酒店hotelDataService获取ID如果未找到酒店返回
    }
    [旅馆旅馆

editFeaturedImageGSP与编辑GSP,但它使用g uploadForm代替g形式

grails应用程序视图酒店editFeaturedImage gsp
<GuploadForm名称"uploadFeaturedImage"行动"uploadFeaturedImage">
    <GhiddenField名称"ID""${这个酒店编号}" />
    <GhiddenField名称"""${这个酒店版本}" />
    "文件"那么"FeaturedImageFile" />
    
="纽扣"> <输入 ="保存" 类型="提交""${信息: '酒店特色图片上传标签', 默认: '上载')}" /> </场集 </g uploadForm

将图片上传到S

uploadFeatureImage控制器的操作使用前面描述的命令对象来验证上传表单的提交。如果未找到验证错误,它将调用服务

grails应用程序控制器示例grails HotelController groovy
定义 uploadFeaturedImageFeaturedImageCommand cmd如果cmd hasErrors响应cmd错误模型: [旅馆指令视图: 'editFeaturedImage')
        返回
    }

    定义酒店uploadHotelFeaturedImageService uploadFeatureImage cmd如果旅馆空值未找到返回
    }

    如果hotel hasErrors回答酒店错误模型: [旅馆旅馆视图: 'editFeaturedImage')
        返回
    }

    当地区域设置请求区域设置Flash消息crudMessageService消息CRUD UPDATE domainName区域设置旅馆ID区域设置重定向旅馆

服务使用亚马逊服务插件提供的用于将文件上传到AWS S的服务如果出现错误,服务将删除它先前已上传的文件

grails应用程序服务示例grails UploadHotelFeaturedImageService groovy
例子进口 grails gorm Transactions事务性
进口 grails插件awssdk的AmazonS服务
进口 常规转换CompileStatic
进口 groovy util日志记录Slf j

静态编译
自我
交易性
 UploadHotelFeaturedImageServiceAmazonS服务AmazonS服务HotelDataService hotelDataService酒店上载FeatureImage FeaturedImageCommand cmd路径"旅馆${cmd ID}/${cmd FeaturedImageFile originalFilename}"
        s FileUrl亚马逊服务storeMultipartFile路径cmd FeaturedImageFile酒店旅馆hotelDataService更新cmd id cmd版本路径s FileUrl如果酒店酒店hasErrors deleteFileByPath路径酒店布尔值deleteFileByPath路径布尔值结果amazonS服务deleteFile路径如果结果日志警告'无法删除文件'路径结果

域类实例在GORM Data Service的帮助下进行了更新

grails应用程序服务示例grails HotelDataService groovy
例子进口 grails gorm services服务

服务旅馆接口HotelDataService酒店获得longID清单清单地图args计数虚空删除可序列化id酒店保存名称酒店更新可序列化IDlong名称酒店更新可序列化IDlongFeaturedImageKeyFeaturedImageUrl

使用AWS Access和Secret运行应用程序

如果您不提供凭据,则将使用凭据提供程序链按此顺序搜索凭据

  • 环境变量AWS ACCESS KEY ID和AWS SECRET KEY

  • Java系统属性aws accessKeyId和aws secretKey

  • 通过Amazon EC元数据服务IAM角色交付的实例配置文件凭证

因此,我们可以使用

gradlew bootRun Daws accessKeyId XXXXX Daws secretKey XXXXX

您需要365bet地区帮助吗

OCI赞助了本指南的创建OCI提供了几种365bet地区服务:

免费咨询

OCI 365bet地区团队包括365bet地区联合创始人Jeff Scott Brown和Graeme Rocher检查我们的365bet地区课程并向发展和维护365bet地区的工程师学习

Grails OCI团队