上周遇到这样一个问题,客户上传高清视频(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;    
    }
    
效果展示:

详细代码可以参考一下这篇文章: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. java爬取并下载酷狗TOP500歌曲

    是这样的,之前买车送的垃圾记录仪不能用了,这两天狠心买了好点的记录仪,带导航.音乐.蓝牙.4G等功能,寻思,既然有这些功能就利用起来,用4G听歌有点奢侈,就准备去酷狗下点歌听,居然都是需要办会员才能下 ...

  2. JSON函数表1

    jsoncpp 主要包含三个class:Value.Reader.Writer.注意Json::Value 只能处理 ANSI 类型的字符串,如果 C++ 程序是用 Unicode 编码的,最好加一个 ...

  3. ef core schema 指定架构

    不知道很少使用Schema模型还是怎么,居然搜帖子没人说,虽然很简单但是还是想记录一下坑 命名空间 using System.ComponentModel.DataAnnotations.Schema ...

  4. ZROI Day1 比赛解题报告

    ZROI Day1 比赛解题报告 版权原因不提供题面相关信息 序 前天晚上搞得比较晚,然后早上做题很没状态,刚看到T1发现没什么思路就有点慌,赶紧看了看T2,T3, 发现T3暴力很好打,T2想了一想可 ...

  5. 经典算法,yuv与rgb互转,查表法,让你的软件飞起来

    代码的运算速度取决于以下几个方面 1. 算法本身的复杂度,比如MPEG比JPEG复杂,JPEG比BMP图片的编码复杂. 2. CPU自身的速度和设计架构 3. CPU的总线带宽 4. 您自己代码的写法 ...

  6. spark内存管理详解

    Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 ...

  7. 快速写个node命令行工具

    1.package.json-bin配置 [创建bat文件,把bat路径添加到PATH中]这些固定的工作可以由npm帮我们完成.package.json中有个bin字段配置: bin: { " ...

  8. Nginx访问限制配置

    Nginx访问限制配置 nginx访问限制可以基于两个方面,一个是基于ip的访问控制,另一个是基于用户的信任登陆控制 下面我们将对这两种方法逐个介绍 基于IP的访问控制 介绍: 可以通过配置基于ip的 ...

  9. django orm 数据查询详解

    一 在django里面创建模型 from django.db import models class Blog(models.Model): name = models.CharField(max_l ...

  10. MySQL的基本操作一

    本文主要涉及到的SQL知识点包括CREATE创建数据库和表.INSERT插入数据.SUM()求和.GROUP BY分组.DATE_FORMAT()格式化日期.ORDER BY排序.COUNT()统计行 ...