基于AWS微服务的图片上传方法与流程

文档序号:14392083阅读:1177来源:国知局
本发明属于计算机网络
技术领域
:,具体涉及一种基于aws微服务的图片上传方法。
背景技术
::通用的云平台服务系统的扫描插件应用,采用了b/s的web分层架构:1).客户浏览器上安装dynamsoft插件,关联扫描仪,将纸质单据扫描上传到web服务器。2).电子单据通过客户浏览器直接上传到web服务器。3).nginxweb服务器,后端处理采用java,内置于tomcatservlet。此外,dynamsoft插件的安装包放置在nginxweb服务器上。4).单据存储采用fastdfs分布式存储系统,内含跟踪服务器(trackerserver)和存储服务器(storageserver):跟踪服务器,主要做调度工作,起到均衡的作用;存储服务器,主要提供容量和备份服务。5).单据元信息存储,内含单据id、名称、单据存储地址等,采用mysql数据库,置于一张管理表中,其部署采用主从复制模式。6).云平台服务系统的其他应用可通过单据id或存储地址,来读取单据完整信息。可见,在传统的云平台服务系统中,采用fastdfs进行单据/图片存储,其存在以下缺陷:单据下载时未先确认mysql中元信息是否存在,而访问直接进入fastdfs存储端,存在性能风险;fastdfs的弹性扩容,存在管理和维护的风险;此外,根据长虹实践经验,月末附近单据上传量会特别大,由于每次上传都要通过web服务器,其高可用性和弹性扩容能力,将成为瓶颈;其它应用可直接访问mysql数据库和fastdfs存储获得单据的完整信息,没有对外查询的api,把数据库和fastdfs存储直接暴露在外,成为其他应用的直接依赖,这会产生数据和接口的不一致以及访问性能瓶颈的问题。技术实现要素:本发明所要解决的技术问题是:提出一种基于aws微服务的图片上传方法,解决传统技术中利用fastdfs进行单据图片的上传存储业务所存在的性能风险、高可用性和弹性扩容能力的瓶颈问题。本发明解决上述技术问题采用的技术方案是:基于aws微服务的图片上传方法,包括以下步骤:a.将上传服务拆分成上传、下载二个微服务;b.利用aws服务api,调用相关方法获取环境中提供的访问密钥信息;c.处理上传请求,将图片元信息写入dynamodb数据库相应的表中;d.根据写入dynamodb数据库时生成的uuid,将图片对象重命名并上传至s3服务器相应位置。作为进一步优化,步骤a具体包括:根据springmvc框架进行拆分,将原上传项目保留至model层,将各自的上传下载方法分别放到各自的controller层;利用dynamodb的高级编程接口dynamodbmapper对model层的类对象进行改造:添加相应的注解,将类的属性和表的属性进行映射。作为进一步优化,步骤b具体包括:通过在配置文件里配置访问id和访问私钥,通过spring框架里的propertyplaceholderconfigurer类来解析javaproperties配置属性的并读取。作为进一步优化,步骤c中,图片元信息存储过程中使用spring的构造函数注入awsdynamodbclient实例,然后利用数据库持久化技术实现存储。作为进一步优化,步骤d中,在图片对象上传过程中通过multipart上传分片技术,实现处理多个图片的请求;在处理每个图片的上传过程中,通过pre-signurl技术生成预签名url,再上传图片至指定url;根据返回的对象信息,获取图片的uuid,将图像重命名为uuid名并存储在s3服务器上,创建操作s3的实例,使用transfermanager实例tm,调用upload()方法将图片对象传到s3服务器用户指定的目录下。作为进一步优化,该方法还包括步骤:e.每当下载图片时,首先利用图片的uuid生成的唯一id查询其是否存在dynamodb中,如果不存在,则不向s3服务器发送请求。本发明的有益效果是:1)在图片上传过程中,通过pre-signurl技术生成预签名url,再上传图片至指定url;通过创建generatepresignedurlrequest类的实例来提供存储桶名称、对象键和过期日期,从而对访问者访问对象进行控制,解决了存储url无保护,避免了攻击者绕过应用服务器,乱发请求滥用此url。2)通过增加单据查询功能,利用上传时通过dynamodbgenerateduuid注解生成的唯一识别码,每当下载时用此uuid去查询dynamodb有没相应的图片元信息,如果没查到,直接打回不存在的单据,避免了每次都向s3存储服务器请求所造成的额外压力。3)单据的上传下载从web服务器剥离成二个微服务;通过单据上传下载分离,可根据需要对相应服务扩容。具体实施方式本发明旨在提出一种基于aws微服务的图片上传方法,解决传统技术中利用fastdfs进行单据图片的上传存储业务所存在的性能风险、高可用性和弹性扩容能力的瓶颈问题。本发明利用aws提供的云服务s3和dynamodb的安全、可扩展、高可用的特性解决用户实时访问量大带给系统的压力,使用java相关技术通过api接口操作s3和dynamodb的实现了相关的业务。在具体实现上,本发明采用aws微服务的设计,利用s3代替fastdfs存储图片等大文档对象,dynamodb代替mysql用于存储对象元信息。实施步骤如下:1、将原来的上传服务拆分成上传、下载二个微服务:根据springmvc框架理念进行拆分,将原上传项目保留model层,将各自的上传下载方法分别放到各自的controller层。利用dynamodb的高级编程接口dynamodbmapper对model层的类对象进行改造,主要是添加相应的注解,将类的属性和表的属性进行映射,如@dynamodbtable(tablename=)将类映射到对应的表。2、利用aws服务api,调用相关方法获取环境中提供的访问秘钥信息;在配置文件里配置访问idaws_access_key_id和访问私钥,aws_secret_access_key,通过spring框架里的propertyplaceholderconfigurer类来解析javaproperties配置属性的并读取。3、处理上传请求,将图片元信息写入dynamodb数据库相应的表中;图片元信息存储过程中使用spring的构造函数注入awsdynamodbclient实例,然后利用数据库持久化技术实现存储。通过处理图片上传的请求,获得上传图片名、图片存储桶等属性,利用数据库持久化技术,也就是通过spring的构造函数注入来生成实例;使用dynamodbmapper对象实例进行对数据库的增删改查操作。具体在保存时,mapper=newdynamodbmapper(client);mapper.save()实现了将对象元信息写入dynamodb。最后需要将插入到数据库后成功的记录返回来,供后续处理。4、根据写入dynamodb数据库生成的uuid,将图片对象重命名并上传至s3服务器相应位置。在上传过程中通过multipart这种上传分片技术,实现处理多个图片的请求;在处理每个图片的上传过程中,通过pre-signurl技术生成预签名url,再上传图片至指定url。根据返回的对象信息,获取图片的uuid,将图像重命名为uuid名并存储在s3服务器上,创建操作s3的实例,使用transfermanager实例tm,调用upload()方法将图片对象传到s3服务器用户指定的目录下。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1