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

电子商城网站建设报告最近国际新闻大事

电子商城网站建设报告,最近国际新闻大事,微信卖水果链接网站怎么做,网站开发朋友圈1.说明 大视频的在线预览,如果不支持断点下载,将无法在苹果手机上播放,同时不支持进度条拖动. 之所以这样,是因为视频文件太大了,通过二进制流向浏览器传输时,整个文件尚未传输完成时,会被浏览器强制关闭流,不再接收,等缓存播放到一定程度时,浏览器会再次向后端请求视频文件,同…

1.说明

        大视频的在线预览,如果不支持断点下载,将无法在苹果手机上播放,同时不支持进度条拖动.

        之所以这样,是因为视频文件太大了,通过二进制流向浏览器传输时,整个文件尚未传输完成时,会被浏览器强制关闭流,不再接收,等缓存播放到一定程度时,浏览器会再次向后端请求视频文件,同时附带range参数,指定获取数据范围,后端需支持对range参数的处理.

2.代码

    @ResponseBody@GetMapping(value = "/preview")@Operation(summary = "在线预览", description = "文件在浏览器中预览")public void Preview(@RequestParam String fileInfoId, HttpServletRequest request, HttpServletResponse response) throws Exception {//获取存储文件var fileInfo = fileInfoService.Get(fileInfoId);if (fileInfo == null) {response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found!");return;}//设置页面缓存if (MisFileType.PICTURE.equals(fileInfo.getFile_type()) || MisFileType.TEXT.equals(fileInfo.getFile_type())) {response.setHeader("Cache-Control", "max-age=60");//页面缓存时间60秒}//断点下载ResumeDownload(request, response, fileInfo, "inline");}/*** 支持断点重新下载文件** @param fileInfo    文件* @param disposition 下载方式 inline:内嵌 attachment:附件*/private static void ResumeDownload(HttpServletRequest request, HttpServletResponse response,FileInfoOutput fileInfo, String disposition) throws IOException {//获取存储文件String storageFilePath = FileConfig.Path + File.separator + fileInfo.getFile_path();File storageFile = new File(storageFilePath);if (!StringUtils.hasLength(storageFilePath) || !storageFile.exists()) {//相对路径未找到文件storageFilePath = fileInfo.getFile_absolute_path();//根据绝对路径寻找文件storageFile = new File(storageFilePath);if (!StringUtils.hasLength(storageFilePath) || !storageFile.exists()) {response.sendError(HttpServletResponse.SC_NOT_FOUND, "File not found!");return;}}//推断类型String mimeType = Files.probeContentType(storageFile.toPath());if (!StringUtils.hasLength(mimeType)) {URL url = new URL("file:///" + storageFilePath);mimeType = url.openConnection().getContentType();}//下载开始位置long startByte = 0;//下载结束位置long endByte = storageFile.length() - 1;//获取下载范围String range = request.getHeader("range");if (range != null && range.contains("bytes=") && range.contains("-")) {range = range.substring(range.lastIndexOf("=") + 1).trim();String[] rangeArray = range.split("-");if (rangeArray.length == 1) {//Example: bytes=1024-if (range.endsWith("-")) {startByte = Long.parseLong(rangeArray[0]);} else { //Example: bytes=-1024endByte = Long.parseLong(rangeArray[0]);}}//Example: bytes=2048-4096else if (rangeArray.length == 2) {startByte = Long.parseLong(rangeArray[0]);endByte = Long.parseLong(rangeArray[1]);}}long contentLength = endByte - startByte + 1;//HTTP 响应头设置//断点续传,HTTP 状态码必须为 206,否则不设置,如果非断点续传设置 206 状态码,则浏览器无法下载if (range != null) {log.trace("断点下载range:{},总大小:{},{}({})", range, storageFile.length(), fileInfo.getFile_name(), fileInfo.getId());response.setStatus(HttpServletResponse.SC_PARTIAL_CONTENT);}if (StringUtils.hasLength(mimeType)) {response.setContentType(mimeType);response.setHeader("Content-Type", mimeType);}response.setHeader("Content-Length", String.valueOf(contentLength));response.setHeader("Accept-Ranges", "bytes");//Content-Range: 下载开始位置-下载结束位置/文件大小response.setHeader("Content-Range", "bytes " + startByte + "-" + endByte + "/" + storageFile.length());//Content-disposition: inline; filename=xxx.xxx 表示浏览器内嵌显示该文件response.setHeader("Content-Disposition", disposition + "; filename=" + URLEncoder.encode(fileInfo.getFile_name(), StandardCharsets.UTF_8));//传输文件流BufferedOutputStream outputStream = null;RandomAccessFile randomAccessFile = null;//已传送数据大小long transmittedLength = 0;try {//以只读模式设置文件指针偏移量randomAccessFile = new RandomAccessFile(storageFile, "r");randomAccessFile.seek(startByte);outputStream = new BufferedOutputStream(response.getOutputStream());byte[] buff = new byte[4096];int len;while (transmittedLength < contentLength && (len = randomAccessFile.read(buff)) != -1) {outputStream.write(buff, 0, len);transmittedLength += len;}outputStream.flush();response.flushBuffer();log.trace("下载完毕:{}-{},下载量:{},总大小:{},{}({})", startByte, endByte, transmittedLength,storageFile.length(), fileInfo.getFile_name(), fileInfo.getId());} catch (IOException e) {if (StringUtils.hasLength(range)) {response.setHeader("Content-Range", "bytes " + startByte + "-" + startByte + transmittedLength + "/" + storageFile.length());log.trace("断点下载完毕:{}-{},下载量:{},总大小:{},{}({})", startByte, endByte, transmittedLength, storageFile.length(),fileInfo.getFile_name(), fileInfo.getId());} else {log.info("下载停止:{}-{},下载量:{},总大小:{},{}({})", startByte, endByte, transmittedLength, storageFile.length(),fileInfo.getFile_name(), fileInfo.getId());}} finally {try {if (randomAccessFile != null) {randomAccessFile.close();}} catch (IOException e) {log.error("下载异常," + fileInfo.getId(), e);}}}

http://www.hkea.cn/news/410694/

相关文章:

  • 这么做3d网站企业邮箱网页版
  • 瑞安网站建设公司关键词排名网络推广
  • 南京学做网站友情链接检查工具
  • 参考文献网站开发百度重庆营销中心
  • 如何做微信ppt模板下载网站企业网页设计公司
  • 做b2b网站百度点击快速排名
  • 网站怎么做移动图片不显示不出来吗芭嘞seo
  • 旅游网站建设服务器ip域名解析
  • 企业网站建设三个原则百度指数资讯指数是指什么
  • 房地产集团网站建设方案软文文案案例
  • 阜蒙县建设学校网站是什么北京seo编辑
  • 珠海建设局网站十大经典事件营销案例分析
  • 创建网站开发公司互联网推广引流是做什么的
  • 万盛集团网站建设seo网站推广全程实例
  • 做教育的网站需要资质吗网站怎么开发
  • 微网站怎么做滚动中国万网域名注册官网
  • 个人如何免费建网站seo在线优化工具 si
  • 双线主机可以做彩票网站吗网络推广合作协议
  • 做外贸的b2b网站域名批量查询系统
  • 建设网站需要哪些职位网站建设策划书
  • 苏州网站建设哪里好网站点击排名优化
  • 网站建设收费标准策划百度推广关键词越多越好吗
  • 网站怎么做更新吗如何建立网页
  • 国外建设工程招聘信息网站tool站长工具
  • 专业做相册书的网站电商网站建设制作
  • 银川网站开发公司电话东莞网
  • 环境保护局网站管理制度建设百度指数的主要功能有
  • 安装wordpress提示500错误关键词优化的策略有哪些
  • 企业网站建设公司排名深圳高端seo公司助力企业
  • 做网站套餐网站seo