一种文件上传方法、电子设备及存储介质与流程
未命名
07-15
阅读:76
评论:0

1.本发明涉及计算机存储领域,具体涉及一种文件上传方法、电子设备及存储介质。
背景技术:
2.用户上传文件是一个常用功能,当前普遍使用文件存储来处理文件存储,对象存储常用场景为用户上传,匿名用户可读,当前现有技术中使用文件存储的做法存在各自的问题,如下:
3.方案一:如图1和图2所示,该做法无法控制用户读写,直接暴露oss的凭证给鹅湖二段,容易被终端使用者破戒滥用于传播违法信息,后续也无法溯源文件来源,很难对上传违法信息的违法人员进行追责;
4.另一点因为oss暴露到公网,一但oss的写入凭证通过其他途径被泄漏(如内部人为泄漏)用于上传文件,应用方无法知道上传文件的人员信息;甚至可能采用覆盖写入把原来的文件替换为非法文件,后果严重;其变通方案即使从网络上oss没有直接暴露,但因为中间反向代理层/slb层(server load balancing)没有业务处理能力,仅仅是代理透传问题一样存在;
5.方案二:如图3和图4所示,该方案中oss对外只暴露匿名读,用户上传必须通过后端服务代理,对终端用户上传可以通过后端服务进行管控并记录行为,但仍有缺点,因为oss暴露到公网,上一方式中提到的泄漏oss写凭证的问题也存在;那么自然可能提出一个变种方案,不直接暴露oss;使用自有后端服务/nginx等中间件作为文件读通道,与后端服务一起屏蔽oss的读写操作;通过图4的方式,oss不再直接暴露到公网,但因为文件的读写服务需要分发到不同服务/中间件,需要多层网络处理,且自己开发的后端服务1作为写入通道,所有上传文件的字节流都需要从这个服务经过,这个服务对性能和并发的要求极高,增大开发成本;
6.方案三:如图5和图6所示,七牛云这样的商用oss的做法是采用后端服务获取临时上传凭证给用户,用户使用临时凭证上传符合凭证要求的文件,由后端服务对获取上传凭证的用户进行管控并记录行为,再结合生成上传凭证时的文件名,时间等信息追踪oss中实际内容的上传者,这种做法的一是必须使用提供对应功能的商用oss,成本较高;使用商用oss都需要oss暴露到公网,方式1中oss凭证泄漏之后的问题,本方式也同样存在;另外临时凭证使用真实文件名进行上传校验,当两个用户上传的文件同名时,会产生文件覆盖或后一个无法写入,从业务上因为其他用户使用这个文件名导致后一个用户无法上传是不合理的;
7.因此需提供一种相对安全使用oss的方式,解决上述现有方案中所存在的管控缺失、自研服务难度及成本问题。
技术实现要素:
8.针对上述存在的技术不足,本发明的目的是提供一种文件上传方法,解决现有方
案所存在的管控缺失、自研服务难度及成本问题,同时并引入新的文件名处理机制,解决了不同用户上传同名文件可能覆盖的问题,并且oss不直接暴露服务,杜绝通过任何方式暴露oss的写凭证后可能出现的空间被滥用传播不良内容。
9.一种文件上传方法,其特征在于,包括如下步骤:
10.s1、读取待上传文件的文件信息并发送获取临时凭证的请求;
11.s2、基于所获取的临时凭证发送文件上传请求;
12.s3、基于文件上传请求中的临时凭证读取文件信息,并将其与文件上传请求中的文件信息进行对比,若对比结果为不一致,则进行s4,若对比结果一致,则进行s5;
13.s4、返回文件上传请求;
14.s5、生成识别码,并将文件上传请求中的文件名替换为该识别码;
15.s6、将文件上传请求发送至云存储服务端,完成上传。
16.s1具体为:基于文件上传请求,用户写终端选择该文件并读取文件信息,发送一带有文件信息的获取临时凭证的请求至后端服务,以实现临时凭证的获取,后端服务对获取临时凭证的需求进行鉴权,若鉴权不通过,则后端服务返回鉴权不通过信息至用户写终端,若鉴权通过,则后端服务向云存储服务端获取临时凭证;
17.所述后端服务把所获取的临时凭证进行编码,以编码为key,将临时凭证的获取请求中的文件信息以及用户信息作为value,存入数据库一中;
18.所述后端服务把用户身份信息、文件信息以及临时凭证发送到文件上传日志服务,并将临时凭证返回给用户写终端。
19.s3具体为:
20.用户写终端发送文件上传请求至上传服务器,上传服务器及其上传模块从文件上传请求中获取临时凭证以及文件信息,通过临时凭证处理模块对临时凭证进行编码,鉴权函数以临时凭证的编码作为key从数据库一中读取文件信息,将该文件信息与从文件上传请求中获取的文件信息进行对比;
21.若对比结果不一致,则返回临时凭证不正确的返回信息至用户写终端;
22.若对比结果一致,则通过鉴权函数生成识别码,鉴权函数以识别码为key,以hash结构把原始文件名以及文件信息作为value,存入数据库二中,鉴权函数更新后端服务写入数据库二的以凭证编码为key的条目,并补充替换后的文件名;
23.上传模块将文件上传请求中的文件名替换为识别码。
24.s6中完成上传后还包括如下步骤:
25.s7、文件上传日志服务根据收到的凭证信息,定时以凭证编码为key从数据库二中读取条目信息;
26.s8、判断该条目是否已有替换后的文件名信息;
27.s9、若无替换文件名信息,则进行如下判断,若已无凭证条目,则结束定时处理,若有凭证条目且已过期,则删除记录,若有凭证条目且未过期,则读取下一条条目,并跳转至s8;
28.若有替换文件名信息,并记录文件及其上传人信息日志。
29.还包括文件访问方法,具体步骤如下:
30.s10、接收文件访问请求;
31.s11、获取访问请求中的文件名,基于该文件获取名为key的条目;
32.s12、若所获取条目不存在,则返回访问读取失败;
33.s13、若所获取条目存在,则从条目中获取原始上传文件名;
34.s14、将原始上传文件名作为下载后的文件设置到请求标头;
35.s15、转发设置后的访问请求至云存储服务端;
36.s16、获取所要访问的文件。
37.s12具体为:
38.读取对象名转化模块从所接收的匿名读终端发送的文件访问请求信息中获取文件名,以该文件名为key从数据库二中获取条目。
39.一种电子设备,包括:
40.至少一个处理器,以及
41.存储器,与至少一个处理器通信连接,用于存储可执行指令;
42.处理器能够执行所述存储器中存储的可执行指令以实现文件上传方法。
43.一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现文件上传方法。
44.本发明的有益效果在于:本发明解决了不同用户上传同名文件可能覆盖的问题,并且oss不直接暴露服务,杜绝通过任何方式暴露oss的写凭证后可能出现的空间被滥用传播不良内容;在oss的写凭证泄漏的情况下,整个上传操作仍然能够对所有上传文件记录到操作人,及相关追踪信息,同时兼顾了整体上传下载性能,相比现有方案提到的变种方案要把自有服务开发到与成熟中间件同等的程度,开发难度和开发成本得到有效控制。
附图说明
45.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
46.图1为现有方案一的逻辑图。
47.图2为现有方案一变通后的逻辑图。
48.图3为现有方案二的逻辑图。
49.图4为现有方案二变通后的逻辑图。
50.图5为现有方案一的逻辑图。
51.图6为现有方案二变通后的逻辑图。
52.图7为本发明的文件上传方法的逻辑图。
53.图8为本发明的文件上传方法的流程图。
具体实施方式
54.下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他
实施例,都属于本发明保护的范围。
55.实施例一
56.如图1至图8所示,本发明提供了一种文件上传方法,包括如下步骤:
57.s1、读取待上传文件的文件信息并发送获取临时凭证的请求;
58.具体如下:基于文件上传请求,用户写终端选择该文件并读取文件信息,发送一带有文件信息的获取临时凭证的请求至后端服务,以实现临时凭证的获取,后端服务对获取临时凭证的需求进行鉴权,若鉴权不通过,则后端服务返回鉴权不通过信息至用户写终端,若鉴权通过,则后端服务向云存储服务端获取临时凭证;
59.后端服务把所获取的临时凭证进行编码,以编码为key,将临时凭证的获取请求中的文件信息以及用户信息作为value,存入数据库一中;
60.后端服务把用户身份信息、文件信息以及临时凭证发送到文件上传日志服务,并将临时凭证返回给用户写终端;
61.s2、基于所获取的临时凭证发送文件上传请求(文件上传请求中至少包括临时凭证以及文件信息);
62.s3、基于文件上传请求中的临时凭证读取获取存储的与临时凭证编码对应的文件信息(临时凭证请求中的文件信息)并与文件上传请求中的文件信息进行对比,若对比结果为不一致,则进行s4,若对比结果一致,则进行s5;
63.获取临时凭证的请求中带有一文件信息,文件上传请求中也带有一文件信息,通过两个文件信息的对比可以防止有人通过泄露的临时凭证上传其他的文件内容;
64.s4、返回文件上传请求;
65.s5、生成识别码,并将文件上传请求中的文件名替换为该识别码;
66.s3-s5具体如下:用户写终端发送文件上传请求至上传服务器,上传服务器及其上传模块从文件上传请求中获取临时凭证以及文件信息,通过临时凭证处理模块对临时凭证进行编码,鉴权函数以临时凭证的编码作为key从数据库一中读取文件信息,将该文件信息与从文件上传请求中获取的文件信息进行对比;
67.若对比结果不一致,则返回临时凭证不正确的返回信息至用户写终端;
68.若对比结果一致,则通过鉴权函数生成识别码,鉴权函数以识别码为key,以hash结构把原始文件名以及文件信息作为value,存入数据库二中,鉴权函数更新后端服务写入数据库二的以凭证编码为key的条目,并补充替换后的文件名;
69.上传模块将文件上传请求中的文件名替换为识别码;
70.s6、将文件上传请求发送至云存储服务端,完成上传;
71.s7、文件上传日志服务根据收到的凭证信息,定时以凭证编码为key从数据库二中读取条目信息;
72.s8、判断该条目是否已有替换后的文件名信息;
73.s9、若无替换文件名信息,则进行如下判断,若已无凭证条目,则结束定时处理,若有凭证条目且已过期,则删除记录,若有凭证条目且未过期,则读取下一条条目,并跳转至s8;
74.若有替换文件名信息,则记录文件及其上传人信息日志;
75.上述步骤具体如下:
76.1.用户写终端上用户已登陆;
77.2.用户写终端选择需要上传的文件;
78.3.用户写终端读取需要上传的文件信息(如:原始文件名、文件大小、类型等);
79.4.用户写终端发送需要上传的文件信息给后端服务获取临时凭证;
80.5.后端服务对获取临时凭证的需求鉴权;
81.6.步骤5后端服务鉴权不通过则进入步骤7;
82.7.后端服务返回鉴权不通过信息给用户写终端;
83.8.步骤5鉴权通过则进入步骤9;
84.9.后端服务向云存储服务端(oss)获取临时凭证(在oss侧这个临时凭证与文件无关);
85.10.后端服务把临时凭证信息作编码(以md5为例)为key,步骤3携带的文件信息,用户身份信息为value存入数据库一(即图7中的redis);
86.11.后端服务把用户和文件信息及临时凭证发送到文件上传日志服务;
87.12.后端服务并把临时凭证返回给用户写终端;
88.13.用户写终端使用临时凭证上传文件到oss;
89.14.用户写终端文件上传请求发送到上传服务器(nginx);
90.15.上传服务器(nginx)及上传模块(nginx_upload_module)从文件上传请求中获取临时凭证信息及文件信息;
91.16.进入提前编写的对临时凭证和文件鉴权的临时凭证处理模块;
92.本发明的临时凭证处理模块采用lua函数;
93.17.临时凭证处理模块对临时凭证信息进行编码;
94.18.鉴权函数以临时凭证的编码为key从redis读取文件信息;
95.19.鉴权函数根据读到的缓存文件信息与nginx_upload_module获取到的文件信息进行对比;
96.20.如果步骤19对比结果不一致,则进入步骤21;
97.21.nginx不再转发请求给oss,直接返回临时凭证与文件不一致的信息给用户写终端;
98.22.如果步骤19对比结果一致,则进入步骤23;
99.23.鉴权函数生成一个识别码,即uuid(或其他不会重复的一个字符串,作用相同,下文以uuid代替);
100.24.鉴权函数以uuid为key,以hash结构把原始文件名及文件信息为value写入数据二(redis);
101.为避免混淆,在说明书中采用了数据库一和数据库二的描述,但并非指代二个完全不同的数据库,因此说明书附图8中仅有一个redis;
102.25.鉴权函数更新后端服务写入数据库二的以凭证编码为key的条目,补充替换后的文件名;
103.26.nginx_upload_module把文件名替换为上述识别码(uuid);
104.27.转发文件上传请求到oss;
105.28.完成上传;
106.29.返回用户写终端文件访问url(是uuid文件名的访问url);
107.30.文件上传日志服务根据收到的凭证信息,定时以凭证编码为key从redis读取条目信息;
108.31.判断该条目是否已有替换后文件名信息;
109.32.步骤31判断结果还没有替换后文件名信息进入步骤33;
110.33.判断是否还有未过期且未记录的凭证条目进度步骤34;
111.34.如果步骤33已无条目,则本次定时处理结束;
112.35.如果步骤33还有条目,若该条目已过期,则删除记录,若该条目未过期,则读取下一条条目,跳转步骤31;
113.36.步骤31判断结果已有替换后文件名信息进入步骤37;
114.37.记录文件及其上传人信息日志;
115.38.转入步骤33;
116.本发明还提供一种基于上述文件上传方法的文件匿名读取方法,具体步骤如下:
117.文件读取的步骤如下:
118.s10、接收文件访问请求;
119.s11、获取访问请求中的文件名,基于该文件获取名为key的条目;
120.具体为:读取对象名转化模块从所接收的匿名读终端发送的文件访问请求信息中获取文件名,以该文件名为key从数据库二中获取条目;
121.s12、若所获取条目不存在,则返回访问读取失败;
122.s13、若所获取条目存在,则从条目中获取原始上传文件名;
123.s14、将原始上传文件名作为下载后的文件设置到请求标头;
124.s15、转发设置后的访问请求至云存储服务端;
125.s16、获取所要访问的文件;
126.1.匿名读终端提交访问请求(文件名为uuid);
127.2.访问请求到达nginx;
128.3.下载重命名的读取对象名转化模块获取请求信息;
129.本发明的读取对象名转化模块也采用lua函数;
130.4.下载重命名的读取对象名转化模块从数据库二以请求的文件名为key读区条目;
131.5.如果步骤4获取条目不存在,进入步骤6;
132.6.ngxin直接返回文件不存在;
133.7.如果步骤4获取条目存在,进入步骤8;
134.8.下载重命名的lua函数从条目周获取原始上传文件名;
135.9.把原始上传文件名作为下载后的文件名设置到请求header;
136.10.转发请求到oss;
137.11.oss返回文件流;
138.12.nginx透传返回文件流给匿名读终端;
139.上述步骤中匿名用户访问携带的文件名就是上传时生成的全局唯一随机键值,通过给反向代理添加lua函数,从缓存读取上传时存储的全局唯一随机键值与原始文件名关
系,在下载时替换文件名为原始文件名,来提供易用性。
140.实施例二
141.本发明还提供一种能够实现上述实施例方案的电子设备,包括:
142.至少一个处理器,以及
143.存储器,与至少一个处理器通信连接,用于存储可执行指令;
144.处理器能够执行所述存储器中存储的可执行指令以实现上述实施例中所提及的方法;
145.通信连接的方式可以为总线、无线通信等方式中的一个。
146.实施例三
147.本发明还提供一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现上述实施例一所提到的文件上传方法。
148.显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
技术特征:
1.一种文件上传方法,其特征在于,包括如下步骤:s1、读取待上传文件的文件信息并发送获取临时凭证的请求;s2、基于所获取的临时凭证发送文件上传请求;s3、基于文件上传请求中的临时凭证读取文件信息,并将其与文件上传请求中的文件信息进行对比,若对比结果为不一致,则进行s4,若对比结果一致,则进行s5;s4、返回文件上传请求;s5、生成识别码,并将文件上传请求中的文件名替换为该识别码;s6、将文件上传请求发送至云存储服务端,完成上传。2.如权利要求1所述的一种文件上传方法,其特征在于,所述s1具体为:基于文件上传请求,用户写终端选择该文件并读取文件信息,发送一带有文件信息的获取临时凭证的请求至后端服务,以实现临时凭证的获取,后端服务对获取临时凭证的需求进行鉴权,若鉴权不通过,则后端服务返回鉴权不通过信息至用户写终端,若鉴权通过,则后端服务向云存储服务端获取临时凭证;所述后端服务把所获取的临时凭证进行编码,以编码为key,将临时凭证的获取请求中的文件信息以及用户信息作为value,存入数据库一中;所述后端服务把用户身份信息、文件信息以及临时凭证发送到文件上传日志服务,并将临时凭证返回给用户写终端。3.如权利要求1所述的一种文件上传方法,其特征在于,所述s3具体为:用户写终端发送文件上传请求至上传服务器,上传服务器及其上传模块从文件上传请求中获取临时凭证以及文件信息,通过临时凭证处理模块对临时凭证进行编码,鉴权函数以临时凭证的编码作为key从数据库一中读取文件信息,将该文件信息与从文件上传请求中获取的文件信息进行对比;若对比结果不一致,则返回临时凭证不正确的返回信息至用户写终端;若对比结果一致,则通过鉴权函数生成识别码,鉴权函数以识别码为key,以hash结构把原始文件名以及文件信息作为value,存入数据库二中,鉴权函数更新后端服务写入数据库二的以凭证编码为key的条目,并补充替换后的文件名;上传模块将文件上传请求中的文件名替换为识别码。4.如权利要求1所述的一种文件上传方法,其特征在于,所述s6中完成上传后还包括如下步骤:s7、文件上传日志服务根据收到的凭证信息,定时以凭证编码为key从数据库二中读取条目信息;s8、判断该条目是否已有替换后的文件名信息;s9、若无替换文件名信息,则进行如下判断,若已无凭证条目,则结束定时处理,若有凭证条目且已过期,则删除记录,若有凭证条目且未过期,则读取下一条条目,并跳转至s8;若有替换文件名信息,并记录文件及其上传人信息日志。5.如权利要求4所述的一种文件上传方法,其特征在于,还包括文件访问方法,具体步骤如下:s10、接收文件访问请求;s11、获取访问请求中的文件名,基于该文件获取名为key的条目;
s12、若所获取条目不存在,则返回访问读取失败;s13、若所获取条目存在,则从条目中获取原始上传文件名;s14、将原始上传文件名作为下载后的文件设置到请求标头;s15、转发设置后的访问请求至云存储服务端;s16、获取所要访问的文件。6.如权利要求5所述的一种文件上传方法,其特征在于,所述s11具体为:读取对象名转化模块从所接收的匿名读终端发送的文件访问请求信息中获取文件名,以该文件名为key从数据库二中获取条目。7.一种文件上传装置,其特征在于,包括:至少一个处理器,以及存储器,与至少一个处理器通信连接,用于存储可执行指令;处理器能够执行所述存储器中存储的可执行指令以实现权利要求1至7任一项所述的方法。8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7中任一项所述的方法。
技术总结
本发明提供一种文件上传方法、电子设备及存储介质,涉及计算机技术领域,本发明解决了不同用户上传同名文件可能覆盖的问题,并且OSS不直接暴露服务,杜绝通过任何方式暴露OSS的写凭证后可能出现的空间被滥用传播不良内容;在OSS的写凭证泄漏的情况下,整个上传操作仍然能够对所有上传文件记录到操作人,及相关追踪信息,同时兼顾了整体上传下载性能,相比现有方案提到的变种方案要把自有服务开发到与成熟中间件同等的程度,开发难度和开发成本得到有效控制。得到有效控制。得到有效控制。
技术研发人员:刘纯
受保护的技术使用者:科舸物联科技有限公司
技术研发日:2023.04.18
技术公布日:2023/7/12
版权声明
本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)
航空之家 https://www.aerohome.com.cn/
飞机超市 https://mall.aerohome.com.cn/
航空资讯 https://news.aerohome.com.cn/