首页 > 其他分享 >Web中实现文件上传下载的三种解决方案(推荐)

Web中实现文件上传下载的三种解决方案(推荐)

时间:2023-05-18 18:44:34浏览次数:54  
标签:Web stream 解决方案 上传下载 bytes serverFile 编译 源码 file

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

 

视频演示:

windows控件安装,,linux-deb控件包安装,linux-rpm控件包安装,php7测试,php5测试,vue-cli-测试,asp.net-IIS Express测试,asp.net-IIS测试,asp.net-阿里云(oss)测试,asp.net-华为云(obs)测试,jsp-springboot测试,ActiveX(x86)源码编译,ActiveX(x64)源码编译,Windows(npapi)源码编译,macOS源码编译,Linux(x86_64)源码编译,Linux(arm)源码编译,Linux(mips-uos)源码编译,Linux(mips-kylin-涉密环境)源码编译,sm4加密传输,压缩传输,

示例下载地址

源代码文档

asp.net源码下载jsp-springboot源码下载jsp-eclipse源码下载jsp-myeclipse源码下载php源码下载csharp-winform源码下载vue-cli源码下载c++源码下载

详细配置信息及思路

 

 

标签:Web,stream,解决方案,上传下载,bytes,serverFile,编译,源码,file
From: https://www.cnblogs.com/songsu/p/17413002.html

相关文章

  • Html中使用jquery通过Ajax请求WebService接口以及跨域问题解决
    场景VS2019新建WebService/Web服务/asmx并通过IIS实现发布和调用:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130743584在上面实现发布WebService的基础上,怎样在html中通过jquery对接口发起请求和解析数据。注:博客:https://blog.csdn.net/badao_liumang_qiz......
  • B/S中实现文件上传下载的三种解决方案(推荐)
    ​ 第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{    InputStreamstream=file.getInputStream();// 把文件读入    StringfilePath=request.......
  • S3Util S3 上传下载
     S3Utilimportcom.amazonaws.AmazonClientException;importcom.amazonaws.AmazonServiceException;importcom.amazonaws.HttpMethod;importcom.amazonaws.SdkClientException;importcom.amazonaws.auth.AWSCredentials;importcom.amazonaws.auth.AWSStaticCred......
  • postgres 错误duplicate key value violates unique constraint 解决方案
    出错代码tortoise.exceptions.IntegrityError:duplicatekeyvalueviolatesuniqueconstraint"word_bank2_pkey"原文连接分析bugpostgres出现该问题着实没仔细看数据表序列ID,、出现的原因是:以word_bank2表为列子.id是唯一的且id在数据库中是自增的.而现在数据库中存......
  • web页面展示PDF文件
    简单展示PDF1.下载pdf.js插件<scriptsrc='https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.6.172/pdf.min.js'></script>2.解析PDF文件渲染为canvasconstpdfjsLib=window.pdfjsLibpdfjsLib.getDocument('path/demo1.pdf').promise......
  • 低版本Grafana使用原生webhook实现企业微信告警
    公司现有生产环境普遍使用的还是Grafana7版本,而Grafana9版本才支持企业微信告警。钉钉倒是支持,但是公司不用钉钉,不想就为了这个下一个软件。且Grafana的版本升级太激进,每个大版本之间的差异巨大,我也不想升级,于是另辟蹊径,整了个脚本接收Grafana的POST请求,把请求内容发送到我的企业......
  • IDEA/WEBSTORM配置静态的html,提供给同一局域网访问
    配置端口和勾选不信任的链接 配置Deployment 最重要的一步:重启IDE访问配置的链接即可,可以把localhost改成本机的ip,供同一局域网的人使用了。 ......
  • SpringBoot中实现文件上传下载的三种解决方案(推荐)
    ​ 我们平时经常做的是上传文件,上传文件夹与上传文件类似,但也有一些不同之处,这次做了上传文件夹就记录下以备后用。这次项目的需求:支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭......
  • web实践
    学了点前端,练个手代码<html><head><title>Web程序设计作业1</title><metacharset="utf-8"><scriptsrc="js/jquery-1.9.1.min.js"type="text/javascript"></script>&......
  • SpringMVC中实现文件上传下载的三种解决方案(推荐)
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......