web应用提供文件下载的接口,如何返回文件被删除的这种错误呢

Listening_倾听 2020-06-17 12:19:01
提供的文件下载接口,设置了Content-Disposition 为 attachment,文件是分段读取流式返回的,对于大文件,在下载过程中,如果拿一个小文件用cp命令覆盖了原文件,会导致下载直接中断,浏览器也不会报错,下载下来的就是一个不完整的文件。有什么办法规避吗,或者给浏览器的下载器返回一个文件不存在的错误
...全文
249 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Listening_倾听 2020-06-17
  • 打赏
  • 举报
回复
引用 4 楼 Applied Sciences 的回复:
你说的其实是数据同步问题. 存储位置A和存储位置B B提供现在,A用来实时更新, 每天午夜后A同步到B 网页上写一句,每天几点更新数据,不就解决了?
不是数据同步,就假设只有一份数据,a用户在下载,b用户正好在删除,或者覆盖等操作。 我查了一下 rm mv cp 三者之间的区别,rm实际上只是删了一个引用,如果有进程占用,会直到进程占用结束才会真正删除,mv 覆盖原文件在相同文件系统下,也类似于对原文件执行了rm,至于cp,原理是把文件指针移到头部,然后用新数据覆盖旧数据。因为读取文件是分段读取,一个2G的文件,在读取到1G的时候,如果用一个20k的文件覆盖,那在继续读取后面的数据的时候就为空了,读取文件的流程就结束了,就会导致浏览器提前结束结束下载,下载下来的是一个不完整的文件。
  • 打赏
  • 举报
回复
360能识别说明只是浏览器本身的功能
  • 打赏
  • 举报
回复
你说的其实是数据同步问题. 存储位置A和存储位置B B提供现在,A用来实时更新, 每天午夜后A同步到B 网页上写一句,每天几点更新数据,不就解决了?
Listening_倾听 2020-06-17
  • 打赏
  • 举报
回复
大概就是要得到这种效果。响应头要设置些什么才能让浏览器认为下载失败。 这个我是测试的s3的对象外链下载,用不同的浏览器有不同的效果,用谷歌的时候,即使删除了对象,仍然能下载成功,用360测试的时候删除对象后马上就停止了,然后报错。
Listening_倾听 2020-06-17
  • 打赏
  • 举报
回复
引用 1 楼 Applied Sciences 的回复:
一个问题, 你为啥用cp命令覆盖原来的文件?
需求需要考虑各种极端场景,在文件下载的过程中对原文件进行 cp mv rm 后是否还能正常下载。
  • 打赏
  • 举报
回复
一个问题, 你为啥用cp命令覆盖原来的文件?

5,658

社区成员

发帖
与我相关
我的任务
社区描述
Web开发应用服务器相关讨论专区
社区管理员
  • 应用服务器社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧