java+上传大视频文件断点续传
- 上周遇到这样一个问题,客户上传高清视频(1G以上)的时候上传失败。
- 一开始以为是session过期或者文件大小受系统限制,导致的错误。
- 查看了系统的配置文件没有看到文件大小限制,
- web.xml中seesiontimeout是30,我把它改成了120。
- 但还是不行,有时候10分钟就崩了。
- 同事说,可能是客户这里服务器网络波动导致网络连接断开,我觉得有点道理。
- 但是我在本地测试的时候发觉上传也失败,网络原因排除。
- 看了日志,错误为:
- java.lang.OutOfMemoryError Java heap space
- 上传文件代码如下:
- public static String uploadSingleFile(String path,MultipartFile file) {
- if (!file.isEmpty()) {
- byte[] bytes;
- try {
- bytes = file.getBytes();
- // Create the file on server
- File serverFile = createServerFile(path,file.getOriginalFilename());
- BufferedOutputStream stream = new BufferedOutputStream(
- new FileOutputStream(serverFile));
- stream.write(bytes);
- stream.flush();
- stream.close();
- logger.info("Server File Location="
- + serverFile.getAbsolutePath());
- return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println(e.getMessage());
- }
- }else{
- System.out.println("文件内容为空");
- }
- return null;
- }
- 乍一看没什么大问题,我在 stream.write(bytes); 这句加了断点,发觉根本就没走到。
- 而是在 bytes = file.getBytes(); 就报错了。
- 原因应该是文件太大的话,字节数超过Integer(Bytes[]数组)的最大值,导致的问题。
- 既然这样,把文件一点点的读进来即可。
- 修改上传代码如下:
- public static String uploadSingleFile(String path,MultipartFile file) {
- if (!file.isEmpty()) {
- //byte[] bytes;
- try {
- //bytes = file.getBytes();
- // Create the file on server
- File serverFile = createServerFile(path,file.getOriginalFilename());
- BufferedOutputStream stream = new BufferedOutputStream(
- new FileOutputStream(serverFile));
- int length=0;
- byte[] buffer = new byte[1024];
- InputStream inputStream = file.getInputStream();
- while ((length = inputStream.read(buffer)) != -1) {
- stream.write(buffer, 0, length);
- }
- //stream.write(bytes);
- stream.flush();
- stream.close();
- logger.info("Server File Location="
- + serverFile.getAbsolutePath());
- return getRelativePathFromUploadDir(serverFile).replaceAll("\\\\", "/");
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- System.out.println(e.getMessage());
- }
- }else{
- System.out.println("文件内容为空");
- }
- return null;
- }
- 效果展示:
java+上传大视频文件断点续传的更多相关文章
- webUploader上传大视频文件相关web.config配置
在webuploader上传大文件时必须配置一下,不然请求后台处理程序时,会请求超时.出现404! <system.web> <httpRuntime maxRequestLengt ...
- 百度编辑器上传大视频报http请求错误怎么办
百度编辑器UEditor是由百度web前端研发部开发所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码,所以受到很多开放人员的青睐.但是有时 ...
- java+上传大文件
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...
- java上传大文件解决方案
需求:项目要支持大文件上传功能,经过讨论,初步将文件上传大小控制在10G内,因此自己需要在项目中进行文件上传部分的调整和配置,自己将大小都以10G来进行限制. 第一步: 前端修改 由于项目使用的是BJ ...
- java+上传后的文件展示
文件夹结构支持 大文件上传控件6支持向服务器上传整个文件夹,并且在服务端保存时与本地目录结构完全保持一致,同时在数据库中也保留文件夹的层级结构.开发人员可以借助于数据库中的层级信息方便的管理文件,管理 ...
- 网页上传FLV视频文件
上传 flv格式文件一致提示文件类型不允许,是因为CI中的配置文件没有支持这个格式 在 application/config/mimes.php中加入 'flv' => array('video ...
- java 上传大文件以及文件夹
我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用. 这次项目的需求: 支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,i ...
- java上传大文件(局域网环境)
文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...
- Java上传大文件夹
javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...
随机推荐
- WEB小计
使用vue的事件绑定时,应当使用.stop来阻止事件的传播 html 有捕获和冒泡两种事件机制
- 查找和杀掉占用GPU显存的进程
用只有2个G的显卡跑数据就需要在训练之前先把无关进程杀掉,防止跑到一半显存满了 nvidia-smi:显示当前GPU中的线程 kill -9 PID:输入PID以结束线程
- python版本
一般在Linux下,默认会安装一个python2.*的版本,但是我们自己开发有时候需要python3.*的版本 1. 安装python3 .安装依赖包 )首先安装gcc编译器,gcc有些系统版本已经默 ...
- java基础4(线程)
1.请简单描述什么是并行,什么是并发? 并行:指两个或多个事件在同一时刻发生(同时发生). 并发:指两个或多个事件在同一个时间段内发生. 通俗易懂版: 你吃饭吃到一半,电话来了,你一直到吃完了以后才去 ...
- 微信小程序点击复制功能
wx.setClipboardData({ data: '这是要复制的文字', success: function (res) { wx.showModal({ title: '提示', conten ...
- [LeetCode]1089. Duplicate Zeros
Given a fixed length array arr of integers, duplicate each occurrence of zero, shifting the remainin ...
- useradd 报Creating mailbox file: File exists
问题描述:增加一个用户时,报下面的错误:[root@master ~]# useradd hadoopuseradd: warning: the home directory already exis ...
- MySql学习笔记【二、库相关操作】
命令规范 关键字.函数名称大写 数据库.表名.字段名小写 语句须以分号结尾 切换使用数据库 USE database_name 如:USE test 查看数据库列表 SHOW {DATABASES|S ...
- 微服务之Nacos配置中心源码解析(二)
Nacos配置中心源码解析 源码入口 ConfigFactory.createConfigService ConfigService configService = NacosFactory.crea ...
- vlan linux内核数据流程
转:http://blog.sina.com.cn/s/blog_62bbc49c0100fs0n.html 一.前言 前几天做协议划分vlan的时候看了一些linux内核,了解不深,整理了下vlan ...