1.  上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。
  2. 一开始以为是session过期或者文件大小受系统限制,导致的错误。
  3. 查看了系统的配置文件没有看到文件大小限制,
  4. web.xmlseesiontimeout30,我把它改成了120
  5. 但还是不行,有时候10分钟就崩了。
  6. 同事说,可能是客户这里服务器网络波动导致网络连接断开,我觉得有点道理。
  7. 但是我在本地测试的时候发觉上传也失败,网络原因排除。
  8. 看了日志,错误为:
  9. java.lang.OutOfMemoryError Java heap space
  10. 上传文件代码如下:
  11.     public static String uploadSingleFile(String path,MultipartFile file) {
  12.         
  13.         if (!file.isEmpty()) {
  14.             
  15.                 byte[] bytes;
  16.                 try {
  17.                     bytes = file.getBytes();
  18.                     
  19.                     // Create the file on server
  20.                     File serverFile = createServerFile(path,file.getOriginalFilename());
  21.                     BufferedOutputStream stream = new BufferedOutputStream(
  22.                             new FileOutputStream(serverFile));
  23.                     stream.write(bytes);
  24.                     stream.flush();
  25.                     stream.close();
  26.     
  27.                     logger.info("Server File Location="
  28.                             + serverFile.getAbsolutePath());
  29.  
  30.                     return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");
  31.                 } catch (IOException e) {
  32.                     // TODO Auto-generated catch block
  33.                     e.printStackTrace();
  34.                     System.out.println(e.getMessage());
  35.                 }
  36.             
  37.         }else{
  38.             System.out.println("文件内容为空");
  39.         }
  40.         return null;    
  41.     }
  42. 乍一看没什么大问题,我在 stream.write(bytes); 这句加了断点,发觉根本就没走到。
  43. 而是在 bytes = file.getBytes(); 就报错了。
  44. 原因应该是文件太大的话,字节数超过IntegerBytes[]数组)的最大值,导致的问题。
  45. 既然这样,把文件一点点的读进来即可。
  46. 修改上传代码如下:
  47.  
  48.    public static String uploadSingleFile(String path,MultipartFile file) {
  49.         
  50.         if (!file.isEmpty()) {
  51.             
  52.                 //byte[] bytes;
  53.                 try {
  54.                     //bytes = file.getBytes();
  55.                     
  56.                     // Create the file on server
  57.                     File serverFile = createServerFile(path,file.getOriginalFilename());
  58.                     BufferedOutputStream stream = new BufferedOutputStream(
  59.                             new FileOutputStream(serverFile));
  60.                     int length=0;
  61.                     byte[] buffer = new byte[1024];
  62.                     InputStream inputStream = file.getInputStream();
  63.                     while ((length = inputStream.read(buffer)) != -1) {
  64.                         stream.write(buffer, 0, length);
  65.                     }
  66.                     //stream.write(bytes);
  67.                     stream.flush();
  68.                     stream.close();
  69.     
  70.                     logger.info("Server File Location="
  71.                             + serverFile.getAbsolutePath());
  72.  
  73.                     return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");
  74.                 } catch (IOException e) {
  75.                     // TODO Auto-generated catch block
  76.                     e.printStackTrace();
  77.                     System.out.println(e.getMessage());
  78.                 }
  79.             
  80.         }else{
  81.             System.out.println("文件内容为空");
  82.         }
  83.         return null;    
  84.     }
  85.     
  86. 效果展示:

详细代码可以参考一下这篇文章:http://blog.ncmem.com/wordpress/2019/08/09/java%e4%b8%8a%e4%bc%a0%e5%a4%a7%e8%a7%86%e9%a2%91%e6%96%87%e4%bb%b6%e6%96%ad%e7%82%b9%e7%bb%ad%e4%bc%a0/

java+上传大视频文件断点续传的更多相关文章

  1. webUploader上传大视频文件相关web.config配置

    在webuploader上传大文件时必须配置一下,不然请求后台处理程序时,会请求超时.出现404! <system.web> <httpRuntime maxRequestLengt ...

  2. 百度编辑器上传大视频报http请求错误怎么办

    百度编辑器UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,所以受到很多开放人员的青睐.但是有时 ...

  3. java+上传大文件

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  4. java上传大文件解决方案

    需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在10G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以10G来进行限制. 第一步: 前端修改 由于项目使用的是BJ ...

  5. java+上传后的文件展示

    文件夹结构支持 大文件上传控件6支持向服务器上传整个文件夹,并且在服务端保存时与本地目录结构完全保持一致,同时在数据库中也保留文件夹的层级结构.开发人员可以借助于数据库中的层级信息方便的管理文件,管理 ...

  6. 网页上传FLV视频文件

    上传 flv格式文件一致提示文件类型不允许,是因为CI中的配置文件没有支持这个格式 在 application/config/mimes.php中加入 'flv' => array('video ...

  7. java 上传大文件以及文件夹

    我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...

  8. java上传大文件(局域网环境)

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

  9. Java上传大文件夹

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

随机推荐

  1. WEB小计

     使用vue的事件绑定时,应当使用.stop来阻止事件的传播   html 有捕获和冒泡两种事件机制

  2. 查找和杀掉占用GPU显存的进程

    用只有2个G的显卡跑数据就需要在训练之前先把无关进程杀掉,防止跑到一半显存满了 nvidia-smi:显示当前GPU中的线程 kill -9 PID:输入PID以结束线程

  3. python版本

    一般在Linux下,默认会安装一个python2.*的版本,但是我们自己开发有时候需要python3.*的版本 1. 安装python3 .安装依赖包 )首先安装gcc编译器,gcc有些系统版本已经默 ...

  4. java基础4(线程)

    1.请简单描述什么是并行,什么是并发? 并行:指两个或多个事件在同一时刻发生(同时发生). 并发:指两个或多个事件在同一个时间段内发生. 通俗易懂版: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去 ...

  5. 微信小程序点击复制功能

    wx.setClipboardData({ data: '这是要复制的文字', success: function (res) { wx.showModal({ title: '提示', conten ...

  6. [LeetCode]1089. Duplicate Zeros

    Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remainin ...

  7. useradd 报Creating mailbox file: File exists

    问题描述:增加一个用户时,报下面的错误:[root@master ~]# useradd hadoopuseradd: warning: the home directory already exis ...

  8. MySql学习笔记【二、库相关操作】

    命令规范 关键字.函数名称大写 数据库.表名.字段名小写 语句须以分号结尾 切换使用数据库 USE database_name 如:USE test 查看数据库列表 SHOW {DATABASES|S ...

  9. 微服务之Nacos配置中心源码解析(二)

    Nacos配置中心源码解析 源码入口 ConfigFactory.createConfigService ConfigService configService = NacosFactory.crea ...

  10. vlan linux内核数据流程

    转:http://blog.sina.com.cn/s/blog_62bbc49c0100fs0n.html 一.前言 前几天做协议划分vlan的时候看了一些linux内核,了解不深,整理了下vlan ...