当前位置: 首页 > news >正文

杭州自助建站模板可以发布商品的免费平台

杭州自助建站模板,可以发布商品的免费平台,如何快速搭建个人网站,图库网站源码下载1.获取文件信息、获取视频信息 走的都是同一个方法:baseController里面的getFile。 在getFile方法里面进行判断文件的类型,判断是不是m3u8类型或者ts类型做一些额外的处理。 获取信息底层就是读取文件,然后写入response的OutputStream ou…

1.获取文件信息、获取视频信息

走的都是同一个方法:baseController里面的getFile。

在getFile方法里面进行判断文件的类型,判断是不是m3u8类型或者ts类型做一些额外的处理。

获取信息底层就是读取文件,然后写入response的OutputStream

out = response.getOutputStream();

            File file = new File(filePath);if (!file.exists()) {return;}in = new FileInputStream(file);limitInputStream = new LimitInputStream(in,new BandwidthLimiter(1024));byte[] byteData = new byte[1024];out = response.getOutputStream();int len = 0;while ((len = limitInputStream.read(byteData)) != -1) {out.write(byteData, 0, len);}out.flush();

在readFile的时候要做一些校验,防止用户输入类似“../”这种目录从而访问到我们的其他信息
 

2.新建文件夹

流程:

        根据传入的文件名和父目录id(pid)查询是否有同名文件夹,如果没有才能插入数据库。本项目在插入之后又进行了一次校验(校验目录数量是否大于2),是为了防止高并发的插入。
防止高并发也可以加锁。

加锁的话这里延伸一下。

        加锁在方法上(synchronized)的时候,锁住的是调用当前方法的对象,我们Bean一般是单例模式,所以锁住这个Bean对象之后其他用户调用这个方法也会串行执行(严重影响效率)。
所以我们应该根据用户Id加锁,或者使用分布式锁。

再说一下synchronize在代理下的问题:

        当我们在方法上加入了@async或者@transaction这些注解,他们是使用aop实现的,底层用到了动态代理,所以,我们其实拿到的是代理对象,调用的方法是代理对象的方法,此时如果方法里是使用synchronized(this)这种方法加锁,那么锁就会在事物提交之前就释放那么可能就会引起并发安全问题。

可以看一下下图里面fileInfoService的名字,可以看出是被代理过的对象。

3.批量移动文件

流程:

  1. 参数校验阶段

    • 检查要移动的文件ID列表(fileIds)是否与目标文件夹ID(filePid)相同,防止将文件移动到自身位置
    • 如果目标文件夹不是根目录(filePid ≠ 0),则验证该文件夹是否存在且有效
  2. 准备目标文件夹数据

    • 将文件ID字符串拆分为数组(fileIdArray
    • 查询目标文件夹下现有的所有文件,并转换为以文件名为键的Map结构,用于快速查找
  3. 获取待移动文件列表

    • 根据用户ID和文件ID数组,查询出所有需要移动的文件信息
  4. 执行文件移动操作

    • 遍历待移动文件列表,对每个文件:
      • 检查目标文件夹中是否已存在同名文件
      • 如果存在同名文件,则自动生成新的文件名(重命名)
      • 更新文件的父目录ID为目标文件夹ID
      • 如果文件名冲突,则使用新生成的文件名
  5. 事务保障

    • 整个操作过程在事务管理下进行,确保所有文件移动操作要么全部成功,要么全部回滚
  6. 异常处理

    • 在参数校验和文件夹验证阶段,如果发现异常情况(如无效的目标文件夹),立即抛出业务异常终止操作

4.下载文件实现

流程:下载分为两步:获取下载链接(就是从后端获取一个code,这一步做登录校验)、根据code来真正的下载文件(不校验登录)。

为什么要分为两步:

        如果浏览器集成了第三方插件,如果只有一个下载接口我们又希望校验(登录)之后才能下载,那么第三方插件拿不到我们的登录数据就不能实现下载功能。

获取下载链接流程:

        校验如果是文件夹不允许下载,根据fileId和userId查询是否存在该文件,存在的话生成一个50位的随机字符串(code)。将这个code作为key,文件的路径和名字作为value,保存到redis中并设置过期时间。

下载文件流程:

从redis中获取文件的路径和名字,设置http响应头

  • ​**Content-Type**:声明文件为可下载类型(application/x-msdownload
  • ​**Content-Disposition**:强制浏览器下载而非预览,并指定文件名



 

http://www.dtcms.com/a/396656.html

相关文章:

  • 凡科建站怎么导出网页可不可以自己做网站
  • 免费制作企业网站平台怎样做 云知梦 网站
  • 计算机网站建设招聘阿里巴巴网站的搜索引擎优化案例
  • 常州网站快速排名优化我的世界做壁纸网站
  • 您的网站未备案wordpress视差插件
  • 亚马逊做网站发礼物换评价宝安做棋牌网站建设有哪些公司
  • 做网站怎么找客户联系方式网站建设的重点是什么
  • datadata.asp 网站 破解西安高端网站制作公司哪家好
  • 电商运营自学网站网站开发游戏程序开发
  • 淘宝客网站用什么软件做cdn wordpress 统计
  • 黑龙江省建设教育网站查询想找可以在家做的手工活去什么网站
  • php 外贸商城网站建设网上怎么查自己的房屋结构图
  • 最专业的企业营销型网站建设公司生成图片
  • html企业网站源码软件开发公司专业的有哪些
  • 三门峡网站建设电话wordpress 此网页包含重定向循环
  • 合肥电子商务开发网站建设jsp网站开发实例视频教程
  • 天津公司网站建设如何评价一个网站设计的好坏
  • 网站建设的电话回访郑州做网站优化电话
  • seo网站建设步骤做洗衣液的企业网站
  • 网站开发建设招聘要求seo外包品牌
  • 张家港营销型网站建设很多搜索词网站怎样做
  • 网站改造设计方案邢台网站建设最新报价
  • 水利建设工程网站seodao cn
  • wordpress备份文件在哪随州抖音seo收费标准
  • 电子商务网站建设前的分析北京官网首页
  • 国外网站代做重庆网站建设公司电话
  • 金坛网站优化国际新闻最新消息十条摘抄
  • 网站建设的思想北京的广告公司有哪些
  • 固安县建设局网站中文域名 网站
  • wordpress站点标题和副标题广告策划