.html内容
<div> <form method="post" action="/Cyberspace/main/informationBatchAdd.do" enctype="multipart/form-data"> <input type="file" id="excelFile" multiple="multiple" name="file"/> <button type="submit">批量上传</button> </form> </div>
2.服务端后台支持多文件上传的接口
/** * 信息上报批量增加 */ @RequestMapping(value = "informationBatchAdd", method = RequestMethod.POST) @ResponseBody public JSONResult informationBatchAdd(MultipartHttpServletRequest request) { JSONResult jsonResult; try { Integer result = 0; MultiValueMap<String, MultipartFile> multiValues = request.getMultiFileMap();//获取请求中所有的文件流 Iterator<Map.Entry<String, List<MultipartFile>>> iterator = multiValues.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, List<MultipartFile>> entry = iterator.next(); for (MultipartFile file : entry.getValue()) { InputStream in = file.getInputStream();//转换成输入流 XSSFWorkbook readWb = new XSSFWorkbook(in); for (int i = 0; i < readWb.getNumberOfSheets(); i++) {//遍历该表格中所有的工作表,i表示工作表的数量 getNumberOfSheets表示工作表的总数 XSSFSheet sheet = readWb.getSheetAt(i); 。。。 Integer totalRow = sheet.getLastRowNum();//获取excel共有多少行 for (int rowNum = 1; rowNum <= totalRow; rowNum++) { // 循环行Row XSSFRow hssfRow = sheet.getRow(rowNum); if (hssfRow != null && hssfRow.getPhysicalNumberOfCells() >= 7) {//getPhysicalNumberOfCells 获取纵列数 。。。 } } result += 。。。; } } } jsonResult = new JSONResult(CODE_SUCCESS, MSG_SUCCESS, result);//JSONResult是自己定义的一个类 } catch (Exception e) { jsonResult = new JSONResult(CODE_FAIL, MSG_FAIL, null); e.printStackTrace(); } return jsonResult; }
3.假如遇到要中转上传文件流到以上的接口中,那么下面的内容就是你的福音
/** * 中转文件 * * @param files 上传的文件,该参数的获取 request.getFiles("xxxx")或者参照第二步中的方法 * @return 响应结果 */ public static String httpClientUploadFile(List<MultipartFile> files, String remoteUrl) { final String remote_url = remoteUrl;// 第三方服务器请求地址 CloseableHttpClient httpClient = HttpClients.createDefault(); String result = ""; try { HttpPost httpPost = new HttpPost(remote_url); MultipartEntityBuilder builder = MultipartEntityBuilder.create(); builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式 for (int i = 0; i < files.size(); i++) { MultipartFile file = files.get(i); String fileName = file.getOriginalFilename(); builder.addBinaryBody("file" + i, file.getInputStream(), ContentType.MULTIPART_FORM_DATA, fileName);// 文件流 builder.addTextBody("filename", fileName);// 类似浏览器表单提交,对应input的name和value } HttpEntity entity = builder.build(); httpPost.setEntity(entity); HttpResponse response = httpClient.execute(httpPost);// 执行提交 HttpEntity responseEntity = response.getEntity(); result = EntityUtils.toString(responseEntity, UTF8); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } finally { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } return result; }
4.中转下载文件
tml+SpringBoot超大视频上传解决方案,html+SpringBoot超大视频上传思路,html+SpringBoot超大视频上传源码,html+SpringBoot超大视频上传实例,html+SpringBoot超大视频上传实现方法,html+SpringBoot超大视频分块上传,html+SpringBoot超大视频分片上传,html+SpringBoot超大视频加密上传,html+SpringBoot超大视频切片上传,html+SpringBoot超大视频批量上传,
随着视频网站和大数据应用的普及,特别是高清视频和4K视频应用的到来,超大文件上传已经成为了日常的基础应用需求。
SpringBoot实现HTTP大文件断点续传分片上传,JAVA以HTTP方式实现大文件分片,分段,分块,分割上传。
需要支持断点续传,上传一半关闭电脑后,明天能够继续上传。或者关闭浏览器,或关闭网页,或刷新网页。
速度这块的话,内网是希望跑满的,百兆网络的话12MB/S左右,千兆的话50MB/S左右。
需要支持文件夹上传,断点续传,上传保留层级结构。
网上搜到的SpringBoot的代码不多,完整的不多,能用的也不多,基本上大部分的文章只是提供了少量的代码,讲一下思路,或者实现方案。
之前一般的做法都是使用HTML5来做的,大部都是传文件的,传文件夹的不多。网上能够搜到的能用的不多。下来下的话,基本上都不能满足用户的 需求。或者用户在用的时候总是会遇到这样或那样的问题,维护的话也很麻烦,用户满意度比较低。
对于大文件的处理,无论是用户端还是服务端,如果一次性进行读取发送、接收都是不可取,很容易导致内存问题。所以对于大文件上传,采用切块分段上传
从上传的效率来看,利用多线程并发上传能够达到最大效率。
文件上传页面的前端可以选择使用一些比较好用的上传组件,例如百度的开源组件WebUploader,泽优软件的up6,这些组件基本能满足文件上传的一些日常所需功能,如异步上传文件,文件夹,拖拽式上传,黏贴上传,上传进度监控,文件缩略图,甚至是大文件断点续传,大文件秒传。
在web项目中上传文件夹现在已经成为了一个主流的需求。在OA,或者企业ERP系统中都有类似的需求。上传文件夹并且保留层级结构能够对用户行成很好的引导,用户使用起来也更方便。能够提供更高级的应用支撑。
版本:6.5.40
代码:https://gitee.com/xproer/up6-jsp-springboot/tree/6.5.40/
nosql示例
nosql示例不需要进行任何配置,可以直接访问测试。
SQL示例
1.创建数据库
2.配置数据库连接
3.自动下载maven依赖
4.启动项目
启动成功
6.访问及测试
默认页面接口定义:
在浏览器中访问:
数据表中的数据
相关问题:
1.javax.servlet.http.HttpServlet错误
2.项目无法发布到tomcat
3.md5计算完毕后卡住
4.服务器找不到config.json文件
5.Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile
相关参考:
文件保存位置
源码工程文档:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源码报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
产品源代码:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
授权生成器:https://drive.weixin.qq.com/s?k=ACoAYgezAAwTIcFph1
何实现大文件上传、断点续传、切片上传,VUE实现大文件分片上传、断点续传,网页 项目大文件上传下载解决方案,VUE实现文件上传与下载,H5+JAVA的文件上传,断点续传,前端大文件切片上传,断点续传、秒传等解决方案,VUE中使用实例,NGINX支持超大文件HTTP断点续传,VUE实现文件的分片上传,前端大文件上传处理方案,如何解决控件附件上传时超大附件无法上传的问题,完美解决B/S无法上传大文件解决方法,网页完美解决B/S无法上传大文件方法,前端完美解决B/S无法上传大文件方法
SpringBoot完美解决B/S无法上传大文件方法,java完美解决B/S无法上传大文件方法,input file完美解决B/S无法上传大文件方法,jsp完美解决B/S无法上传大文件方法,dom完美解决B/S无法上传大文件方法,百度webuploader完美解决B/S无法上传大文件方法,webuploader完美解决B/S无法上传大文件方法,html5完美解决B/S无法上传大文件方法,JS完美解决B/S无法上传大文件方法,完美解决B/S无法上传大文件方法,
JS实现文件夹的多线程上传和下载,JS实现文件夹的加密上传和下载,JS怎么实现文件夹的上传和下载,vue实现文件夹的上传和下载,web实现文件夹的上传和下载,网页实现文件夹的上传和下载,dom实现文件夹的上传和下载,html5实现文件夹的上传和下载,JavaScript实现文件夹的上传和下载,JS如何实现文件夹的上传和下载,JS实现文件夹的上传和下载解决方案,百度webuploader实现文件夹的上传和下载,webuploader实现文件夹的上传和下载,
网页项目纯HTML,纯VUE这类方案不多。客户那边实际上比较在乎两点。
JS实现文件夹的上传和下载,WEBUPLOADER上传大文件的三种解决方案,WEBUPLOADER上传大文件的解决方案,WEBUPLOADER上传大文件的方案,百度WEBUPLOADER上传大文件的三种解决方案,百度WEBUPLOADER上传大文件的三种代码,百度WEBUPLOADER上传大文件的三种源码,百度WEBUPLOADER上传大文件的三种源代码,HTML5上传大文件的三种源代码,JavaScript上传大文件的三种源代码,WEBUPLOADER如何实现大文件断点续传、秒传,
实际上客户对技术并不在意,用HTML也好用控件也罢。
HTML5分片,分段,分块,分割,切片,切割上传,H5原理实际上上传的原理就是把一个大的文件切割成若干个小数据块进行上传,下载的话Chrome虽然提供了几个API,但是不好用
给政府做的一个项目,需要实现一个文件管理系统,主要就是需要在服务端进行加密存储,传输过程也需要进行加密,加密算法需要支持国密SM4,现在因为信息安全的需求,基本政府那边服务端和终端系统都是信创国产化的系统。政府这边对安全性要求比较严格。
附件太大了确实很难上传,上传的时候容易出错,处理起来的确有些麻烦。
现在chrome提供了相关的API,在HTML5中也能够上传文件,不过有限制,每个域名限制了5个TCP连接。用起来不是那么的舒服,也不够灵活,当然也能够满足一般的使用场景。不太复杂的也能够凑合着用。
但是如果有上传文件夹,文件夹中包含很多文件,比如1万或者10万,这种场景下用起来就不是那么的舒服了,如果单个文件的大小超过10G,比如20G,这种场景下用起来也不是特别的舒服。
还有批量下载的话HTML5的能力也有限,下是能下,但是每下一个文件就需要用户手动确认一下,那比如我要下载100个文件,也需要确认100次,用户不太接受这种方式。
用户的环境还是有点复杂的,也就是用户那边公司用的操作系统很多,终端系统有windows,macOS,linux,不同的部门用的系统还不一样,营销部门的话用macOS多一些,运维后端的同事用linux用的多一些,主要就是centos和ubuntu,其它的同事用的windows多一些。1.下载示例
https://gitee.com/xproer/up6-vue-cli
将up6组件复制到项目中
示例中已经包含此目录
1.引入up6组件
2.配置接口地址
接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表
参考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de
3.处理事件
启动测试
启动成功
效果
数据库
源码工程文档:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra
源码报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl
OEM版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a
控件源码下载:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc
*请认真填写需求信息,我们会在24小时内与您取得联系。