首页 > 编程语言 >Java大文件分片上传/多线程上传实例解析

Java大文件分片上传/多线程上传实例解析

时间:2023-05-26 17:35:04浏览次数:49  
标签:文件 Java form 控件 data 源码 多线程 上传

 javaweb上传文件

上传文件的jsp中的部分

上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求

    1. 通过form表单向后端发送请求

         <form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">

            <div class="bbxx wrap">

                <input type="text" id="side-profile-name" name="username" class="form-control">

                <input type="file" id="example-file-input" name="avatar">

                <button type="submit" class="btn btn-effect-ripple btn-primary">Save</button>

            </div>

        </form>

改进后的代码不需要form标签,直接由控件来实现。开发人员只需要关注业务逻辑即可。JS中已经帮我们封闭好了


通过监控工具可以看到控件提交的数据,非常的清晰,调试也非常的简单。


 

2. 通过ajax向后端发送请求

        1.

            $.ajax({ 

                 url : "${pageContext.request.contextPath}/UploadServlet", 

                 type : "POST", 

                 data : $( '#postForm').serialize(), 

                 success : function(data) { 

                      $( '#serverResponse').html(data); 

                 }, 

                 error : function(data) { 

                      $( '#serverResponse').html(data.status + " : " + data.statusText + " : " + data.responseText); 

                 } 

            }); 

ajax分为两部分,一部分是初始化,文件在上传前通过AJAX请求通知服务端进行初始化操作


 

在文件上传完后向服务器发送通知


 

这里需要处理一个MD5秒传的逻辑,当服务器存在相同文件时,不需要用户再上传,而是直接通知用户秒传


这里可以看到秒传的逻辑是非常 简单的,并不是特别的复杂。

            var form = new FormData();

            form.append("username","zxj");

            form.append("avatar",file);

            //var form = new FormData($("#postForm")[0]);

            $.ajax({

                url:"${pageContext.request.contextPath}/UploadServlet",

                type:"post",

                data:form,

                processData:false,

                contentType:false,

                success:function(data){

         

                    console.log(data);

                }

            });

 

接收文件块数据,在这个逻辑中我们接收文件块数据。控件对数据进行了优化,可以方便调试。如果用监控工具可以看到控件提交的数据。

注:

1. 上面的java部分的代码可以直接使用,只需要将上传的图片路径及收集数据并将数据写入到数据库即可

2. 上面上传文件使用到了字节流,其实还可以使用别的流,这个需要读者自己在下面完善测试

3. BeanUtils是一个工具 便于将实体对应的属性赋给实体

4. 上传文件不能使用 request.getParameter("")获取参数了,而是直接将request解析,通过判断每一项是文件还是非文件,然后进行相应的操作(文件的话就是用流来读取,非文件的话,暂时保存到一个map中。)

后端代码逻辑大部分是相同的,目前能够支持MySQL,Oracle,SQL。在使用前需要配置一下数据库

效果展示:

 

视频演示:

windows控件安装,,linux-deb控件包安装,linux-rpm控件包安装,php7测试,php5测试,vue-cli-测试,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++源码下载

详细配置信息及思路

标签:文件,Java,form,控件,data,源码,多线程,上传
From: https://www.cnblogs.com/songsu/p/17435354.html

相关文章

  • Java笔记(九):线程池
    三大方法Executors.newSingleThreadExecutor();//单个线程Executors.newFixedThreadPool(5);//固定的线程池大小Executors.newCachedThreadPool();//可伸缩的以上底层都是由ThreadPoolExecutor实现阿里开发手册:线程池不允许使用Executors去创建,而是通过ThreadP......
  • 基于JAVA的虚拟页面置换算法
    访问【WRITE-BUG数字空间】_[内附完整源码和文档]一概述目的:实现OPT、FIFO、LRU三种置换算法。主要完成任务:实现三种算法并计算出每种算法的却页数,且以表格形式输出结果。使用开发工具:Eclipse—Java。解决主要问题:编写出可视化窗口输出运行结果。二使用的基本概念和原理OPT:在分配......
  • 如何在上架App之前设置证书并上传应用
    ​App上架教程在上架App之前想要进行真机测试的同学,请查看《iOS-最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。P12文件的使用详解注意:同样可以在BuildSetting的sign中设置证书,但是有点麻烦,建议就在General中设置证书,比较方便,还可以查看错误的地方。......
  • 如何在上架App之前设置证书并上传应用
    ​App上架教程在上架App之前想要进行真机测试的同学,请查看《iOS-最全的真机测试教程》,里面包含如何让多台电脑同时上架App和真机调试。P12文件的使用详解注意:同样可以在BuildSetting的sign中设置证书,但是有点麻烦,建议就在General中设置证书,比较方便,还可以查看错误的地方。......
  • Java大文件分片上传/多线程上传源代码
    ​ 这里只写后端的代码,基本的思想就是,前端将文件分片,然后每次访问上传接口的时候,向后端传入参数:当前为第几块文件,和分片总数下面直接贴代码吧,一些难懂的我大部分都加上注释了:上传文件实体类:看得出来,实体类中已经有很多我们需要的功能了,还有实用的属性。如MD5秒传的信息。pub......
  • Java第四日
    今日份Java学习内容循环缘由与定义while循环结构调试程序do-while循环结构for循环  1.  循环缘由与定义     核心要点:在某种场景(多次重复做同一件事的情况)需要使用循环结构,特点:提高效率。 循环结构特点:1.循环条件(初始值、结束值)       ......
  • Java订单号生成唯一
    公司需要开发商城项目,用到了,记录一下Java订单号生成唯一packagecom.iot.store.utils;importorg.apache.commons.lang3.RandomStringUtils;importjava.time.LocalDateTime;importjava.time.format.DateTimeFormatter;publicclassOrderIDGenerator{publicstati......
  • 【atcoder begin 302】【e题 Isolation 】JAVA的快速输入输出
    importjava.io.*;importjava.util.HashSet;importjava.util.Set;/***@authorfishcanfly*/publicclassMain{publicstaticvoidmain(String[]args)throwsIOException{//BufferedReaderbr=newBufferedReader(newInputStreamReader(......
  • Javascript 指南:条件语句
    if/elseif/else语句是程序如何以编程方式处理是/否问题。如果第一个条件的计算结果为true,则程序将运行第一个代码块。否则,它将运行else块。让天气=“下雨”;如果(天气===“下雨”){控制台。log("今天别忘了带伞!");}否则{控制台。日志(“今天可能会很好”!);}输出:Don......
  • Javascript 指南:数组
    数组数组是JavaScript的有序列表,可以存储任何数据类型,包括字符串、数字和布尔值。数组中的每个项目都位于一个编号位置。句法数组由方括号和里面的内容表示。数组中的元素应该用逗号分隔。让colors=["red","blue","green","yellow"];访问和更新元素要访问或更改数组中......