AVA实现大文件上传,JAVA WEB 实现文件上传和下载接口功能,百度webuploader上传文件到服务器指定文件夹问题,webuploader上传文件到服务器指定文件夹问题,JSP上传文件到服务器指定文件夹问题,JAVA上传大文件实现源代码,JAVA上传大文件实现源码,JAVA上传大文件实现代码,JAVA上传大文件实现技巧,JAVA上传大文件实现技术,JAVA上传大文件实现思路,JAVA上传大文件实现解决方案,前端上传大文件实现方案,js上传大文件实现方法,JavaScript上传大文件实现方法,vue上传大文件实现方法,前端上传大文件实现方法,html上传大文件实现方法,html5上传大文件实现方法,百度webuploader上传大文件实现方法,webuploader上传大文件实现方法,JAVA上传大文件实现方法,
JAVA的话主要是负责后端的接口,业务逻辑,功能的实现,比如文件初始化,文件分块,文件块合并,文件信息的查询等。
文件比较大,有50G左右,用户希望能够在网页里面直接上传,一期的时候我们是直接用的HTML5的API,也就是chrome提供的API来做的,但是上线后用户反馈不是特别的好用,用户那边有些电脑用的是WIN7+IE9,chrome的API在ie9里面不支持。但是用户系统是支持的,这就把人整的有点不会了。二期的时候我们还是定制开发了,
前端用了JSP,VUE2,VUE3,后端用了JSP,SpringBoot,IDE用了Eclipse,MyEclipse,因为新项目和老项目都用了两种IDE。
用户要求能够在网页上面上传文件夹,文件夹里面大约有1万多个文件,有大有小,大的有1G~10G,小的有几MB,文件夹上传的时候需要保存层级结构,同时能够将层级结构信息保存到数据库中,同时还需要支持文件夹下载,下载下来的文件夹要和上传的文件夹层级结构一模一样。
要求支持断点续传,支持进度信息离线存储,用户可能传一半没有传完,下班了,明天上班后继续上传,电脑晚上到点需要关机,支持加密传输,支持国密加密算法SM4,要求支持下载,支持非打包方式下载,浏览器要求支持包含IE在内的所有浏览器,
系统环境要求支持信创国产化,比如银河麒麟,中标麒麟,统信UOS,龙芯,数据库支持MySQL,Oracle,达梦数据库,人大金仓,需要提供前端源码,后端源码,控件源码,公司自己的项目,也有自己的产品,后续需要集成使用,
要求提供7*24小时技术支持服务,提供文档教程,视频教程,远程技术指导,1对1技术支持服务,提供手机,微信,QQ,邮箱,企业微信等联系方式。
下载示例:
https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/
工程
NOSQL
NOSQL示例不需要任何配置,可以直接访问测试
创建数据表
选择对应的数据表脚本,这里以SQL为例
修改数据库连接信息
访问页面进行测试
文件存储路径
up6/upload/年/月/日/guid/filename
相关问题:
1.javax.servlet.http.HttpServlet错误
2.项目无法发布到tomcat
3.md5计算完毕后卡住
4.服务器找不到config.json文件
相关参考:
文件保存位置
源码工程文档: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
omcat
编程语言:
系统级:C,C++,Go...
应用级:C#,Java,Python,Perl,Ruby,php...
虚拟机:jvm,pvm...
动态网站:asp .net,jsp
动态网站:
客户端动态
服务器动态:
CGI(将客户端的请求链接转发到后端应用程序服务器,调用应用服务器处理后将结果返回至CGI再返回至客户端)
webapp server:
jsp: tomcat,jboss,jetty,resin...
php: php-fpm
Java编程语言:
JDK: JAVA开发工具箱
Java体系结构:
Java编程语言
Java Class文件格式
Java API
Java VM
JVM的核心组成部分:
Class loader(类加载器)
执行引擎
JVM运行时区域:
方法区: 线程共享,用于存储被虚拟加载的类信息、常量、静态变量等,永久代
堆: Java堆是jvm所管理的内存中最大的一部分,也是GC管理的主要区域,GC的功能是实行垃圾回收的,主流的算法都基于分代收集方式进行:新生代和老年代,线程共享
Java栈: 线程私有,存放线程自己的局部变量等信息
PC寄存器: 线程独占的内存空间
本地方法栈: 为虚拟机所使用到的本地方法实行服务,具体实现方法依赖于平台
Java编程语言特性:
面向对象、多线程编程、结构化错误处理
垃圾收集、动态链接、动态扩展
三个技术流派:
Java 2 SE
Java 2 EE
Java 2 ME
Java 2 EE:
Java 2 SE
Servlet,JSP,EJB,JMS,JMX,JavaMail
Servlet容器:用户通过浏览器像服务器端发请求时,所请求的URL所返回的应该是html文档,但服务器所提供的是一段代码,此代码需要在服务器上执行后将运行结果返回给客户端
print("<h1>)
Note:html标签要硬编码在应用程序中
JSP(可以将Java代码内嵌在HTML代码中):
<html>
<body>
<h1>...</h1>
<%
%>
</body>
</html>
Tomcat的核心组件:
Catalina:servlet container
Coyote:http connection
Jasper:JSP Engine(引擎)
Tomcat Instance(实例):运行中的tomcat进程(java进程)
Server: 即一个tomcat实例
Service: 用于将Connector组件关联至Engine组件,一个Service内部只能包换一个Engine组件和一个或多个connector组件
Engine: Tomcat的核心组件,用于运行jsp或servlet代码
Connector: 接收并解析用户的请求,将请求映射为Engine中运行的代码,之后,将运行结果构建成响应报文
Host: 类似于httpd中的虚拟主机
Context:类似于http中的alias
注意:每个组件都由"类"来实现,有些组件的实现还不止一种
顶级类组件: server
服务类组件: service
容器类组件: 即可以部署webapp的组件,engine,host,context
连接器组件: connector
被嵌套类组件: valve,logger,realm
<server> (.xml文件格式框架)
<service>
<connector />
<connector />
...
<engine>
<host>
<context />
....
</host>
....
</engine>
</service>
</server>
Tomcat的运行模式
standalone:通过内置的web server (http connector)来接收客户端请求
proxy:由专门的web server服务客户端的http请求
in-process:两个组件部署于同一主机
network:部署于不同主机
安装Tomcat(8.5.23):
官方站点:http://tomcat.apache.org
部署前提:
jdk:
Oracle jdk
Open jdk
tomcat
yum install tomcat
官方站点下载
Tomcat目录结构:
$CATALINA_HOME/bin #脚本及启动时用到的类
$CATALINA_HOME/lib #tomcat自己提供的一系列类库
$CATALINA_HOME/conf #tomcat的配置文件
$CATALINA_HOME/work #当中存放的是servlet编译完connector接收过来请求后的文件
Tomcat配置文件:
server.xml: 主配置文件
context.xml: 每个webapp都可以有专用的配置文件,这些配置文件通常位于webapp应用程序目录下的META-INF目录中,用于定义会话管理器,JDBC等;
conf/context.xml是为各webapp提供默认配置
web.xml: 每个webapp部署后才能被访问,此文件则用于为所有的webapp提供默认的部署相关配置
tomcat-users.xml: 用户认证时的账号和密码
catalina.policy: 当使用-security选项启动tomcat实例时会读取此配置文件来实现其安全运行策略
catalina.properties: java属性的定义文件,用于设定类加载器路径等,以及一些JVM性能相关的调优参数
logging.properties: 日至相关的配置信息
server.xml介绍:
server,service,connector,engine,host,context
Java WebAPP 组织结构:
有特定的组织形式、层次型的目录结构:主要包含了servlet代码文件、JSP页面文件、类文件、部署描述符文件
/app/tomcat/webapps/app1/
/: webapp的根目录
WEB-INF/: 当前webapp的私有资源目录,通常用来存放当前webapp自用的web.xml
META-INF/: 当前webapp的私有资源目录,通常用来存放当前webapp自用的context.xml
classes/: 此webapp的私有类
lib/: 此webapp的私有类,被打包为jar格式的类
index.jsp: webapp的主页
webapp归档格式:
.war: webapp
.jar: EJB的类
.rar: 资源适配器
.ear: 企业级应用程序
部署过程:
(1) 安装jdk
jdk:jdk-8u181-linux-x64.tar.gz #安装jdk,此处用的是此版本
(2) 使jdk添加到环境变量
# vim /etc/profile.d/jdk.sh #新建jdk.sh加入到环境变量中
export JAVA_HOME=/app/jdk1.8.0_181 #指定Jdk的安装目录
export PATH=${JAVA_HOME}/bin:$PATH #将jdk加入到全局变量中
# source /etc/profil.d/jdk.sh
(3) 安装tomcat
# tar zxvf apache-tomcat-8.5.32.tar.gz #解压tomcat安装包
# mv apache-tomcat-8.5.32/ tomcat #改名为tomcat
# vim /etc/profile.d/tomcat.sh #将tomcat加入到环境变量中
export CATALINA_HOME=/app/tomcat
export PATH=${CATALINA_HOME}/bin:$PATH
# source /etc/profile.d/tomcat.sh
Note:
catalina.sh [OPTION] #针对tomcat应用的一系列操作
[OPTION]:
start:启动tomcat
stop:停止tomcat
run:前台模式启动tomcat
configtest:检查配置文件
version:查看当前tomcat版本
start -security:安全模式启动
(4) 手动添加一个测试应用程序
1、创建webapp特有的目录结构
WEB-INF/: 当前webapp的私有资源目录,通常用来存放当前webapp自用的web.xml
META-INF/: 当前webapp的私有资源目录,通常用来存放当前webapp自用的context.xml
classes/: 此webapp的私有类
lib/: 此webapp的私有类,被打包为jar格式的类
index.jsp: webapp的主页
# mkdir $CATALIA_HOME/myapp/{classes,lib,WEB-INF,META-INF} -pv
2、提供webapp各个文件
# vim index.jsp #下列是一个测试的页面,在html中嵌入了java的代码,最终会被解释为.class文件予以执行
<%@ page language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
<title>JSP Test Page</title>
</head>
<body>
<% out.println("Hello world."); %>
</body>
</html>
部署(deployment)webapp相关的操作:
deploy: 部署,将webapp的源文件放置于目标目录,并配置tomcat服务器能够基于context.xml文件中定义的路径来访问此webapp,将其特有类通过class loader装载至tomcat
两种方式:
自动部署: auto deploy
手动部署:
1、冷部署: 将webapp复制到指定位置下,而后再启动tomcat
2、热部署: 在不停止tomcat的前提下进行的部分
部署工具:manager、ant脚本、tcd等
undeploy: 反部署,停止webapp,并从tomcat实例拆除其部分文件和部署名
stop: 停止,不再向用户提供服务,但应用程序的类文件依然存在jvm虚拟机上
start: 启动处于停止状态的webapp
redeploy: 重新部署
tomcat自带的应用程序(前端页面功能):
(1) manager app(应用程序管理工具),默认此页面是无法访问的,需要配置,配置完成后不会立即生效,需要重启tomcat,此页面用于管理tomcat上部署的项目
# vim $CATALINA_HOME/conf/tomcat-users.xml
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
# vim $CATALINA_HOME/webapps/manager/META-INF/context.xml
<Valve classname="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$"> #tomcat8.0往上进入manager APP的话就需要开启此功能,这是允许哪些IP访问管理界面,此处是通通允许,如果有固定IP就写固定IP
# catalina.sh stop
# catalina.sh start #重启tomcat使配置生效
(2) host manager(虚拟主机管理工具)
# vim $CATALINA_HOME/conf/tomcat-users.xml
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
# vim $CATALINA_HOME/webapps/host-manager/META-INF/context.xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="^.*$" /> #与开启manager app访问权限类似
# catalina.sh stop
# catalina.sh start #重启tomcat使配置生效
Tomcat的主配置文件结构(强调):
attrubute:属性
value:值
<server attribute="value" attribute="value"... class="">
<service>
<connector />
<connector />
<engine "NAME">
<host name="">
</host>
<host name="">
</host>
<host name="">
<context />
<context />
</host>
</engine>
</service>
</server>
<Server port="8005" shutdown="SHUTDOWN"> #8005端口监听了关闭功能,使用telnet 127.0.0.1 8005连接后SHUTDOWN是可以关闭tomcat的,为了安全性可以将"SHUTDOWN"清空
<Server port="8005" shutdown=""> #可改为这样
Connector连接器概述:
(1) HTTP连接器
(2) SSL连接器
(3) AJP连接器
如server.xml中的连接器定义的就是HTTP连接器:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
定义连接器时的属性非常多,但通常HTTP连接器必须定义的属性只有"port",定义AJP连接器时必须定义的属性只有"protocol",因为默认的协议为HTTP,以下对常用属性说明:
1) address: 指定连接器监听的地址,默认为所有地址,即0.0.0.0
2) maxThreads: 支持的最大并发连接数,默认为200
3) port: 监听的端口,默认为0
4) protocol: 连接器所使用的协议,默认位HTTP/1.1
5) redirectPort: 如果某连接器支持的协议是HTTP,当接收客户端发来的HTTPS请求时,则转发至此属性定义的端口(定义的端口要求已经被监听)
6) connectionTimeout: 等待客户端发送请求的超时时间
7) enableLookups: 是否通过request.getRemoteHost()进行 DNS查询以获取客户端的主机名,默认为True
8) acceptCount: 设置等待队列的最大长度,通常在tomcat所有处理线程均处于繁忙状态时,新发来的请求将被置于等待队列中
下面是一个定义了多个属性的SSL连接器:
<Connector port="8443"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
maxThreads="150": 最大的并发线程数为150个
minSpareThreads="25": 最小空闲线程为25个
maxSpareThreads="75": 最大空闲线程为75个
enableLookups="false": 关闭DNS解析功能
acceptCount="100": 等待队列长度,当tomcat接收超过150个请求后,再来的请求会在队列中等待处理
debug="0": 关闭debug功能
scheme="https": 接收https级的访问
secure="true": 安全加密连接
clientAuth="false": 关闭客户端认证功能
sslProtocol="TLS": 指明SSL的协议
Engine组件概述:
Engine即servlet引擎,默认定义在server.xml中的Catalina,Engine需要defaultHost属性来定义一个接收所有发往非明确定义虚拟主机的请求的Host组件
<Engine name="Catalina" defaultHost="localhost">
常用属性定义:
defaultHost:Tomcat支持基于FQDN的虚拟主机,这些虚拟主机可以通过在Engine容器中定义多个不同的Host组件来实现;但如果此引擎的连接器收到一个发往非明确定义虚拟主机的请求时
则需要将此请求发往一个默认的虚拟主机进行处理,因此,在Engine中定义的多个虚拟主机的主机名称中至少有一个跟defaultHost定义的主机名称同名
name: Engine组件的名称,用于日志和错误信息记录时区别不同的引擎
Host组件概述:
位于Engine容器中用于接收请求并进行相应处理的主机或虚拟主机
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false'>
</Host>
常用属性说明
1) appBase: 此Host的webapps目录,可使用相对路径也可使用绝对路径,相对路径的话是相对于CATALINA_HOME
2) autoDeploy: 在Tomcat运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy,默认为true
3) uppackWARs: 在启动此webapps时是否对WAR格式的归档文件先进行展开,默认为true
下面是示例(定义了两个虚拟主机,context下面再解释,默认虚拟主机为localhost):
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps">
<Context path="" docBase="ROOT"/>
<Context path="/bbs" docBase="/web/bbs"
reloadable="true" crossContext="true"/>
</Host>
<Host name="mail.K-free.com" appBase="/web/mail">
<Context path="/" docBase="ROOT"/>
</host>
</Engine>
主机别名定义(用户就算访问别名的时候也会转发到name后方定义的主机):
如果一个主机有两个或两个以上的主机名,额外的名称均可以以别名的方式进行定义,如下
<Host name="www.K-free.com" appBase="webapps" unpackWARs="true">
<Alias>K-free.com</Alias>
</Host>
Context组件概述:
Context在某些意义上类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个web应用程序,如下
<!-- Tomcat Root Context -->
<Context path="" docBase="/web/webapps"/>
<!-- buzzin webapp -->
<Context path="/bbs"
docBase="/web/threads/bbs"
reloadable="true">
</Context>
<!-- chat server -->
<Context path="/chat" docBase="/web/chat"/>
<!-- darian web -->
<Context path="/darian" docBase="darian"/>
常用的属性有:
1) docBase: 相应Web应用程序的存放位置,也可以使用相对路径,相对于Context所属Host中appBase定义的路径
2) path: 相对于Web服务器根路径而言的URI,如果为"",则表示为此webapp的根路径,如果context定义在一个单独的xml文件中,此属性无须定义
3) reloadable: 是否允许重新加载此context相关的web应用程序的类,默认为false
上述各个组件示例:
<Host name="web1.K-free.com" appBase="/data/webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/data/webapps" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/data/logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
注意: path给定的路径不能以"/"结尾
AVAWEB 文件上传及下载,JAVA大文件上传,大文件下载解决方案,JAVA实现文件分片上传并且断点续传,JAVA大文件分片上传/多线程上传功能,超大文件上传和断点续传的控件,JAVA实现浏览器端大文件分片上传,JAVA实现大文件上传,JAVA WEB 实现文件上传和下载接口功能,
百度webuploader上传文件到服务器指定文件夹问题,webuploader上传文件到服务器指定文件夹问题,JSP上传文件到服务器指定文件夹问题,JAVA上传大文件实现源代码,JAVA上传大文件实现源码,JAVA上传大文件实现代码,JAVA上传大文件实现技巧,JAVA上传大文件实现技术,JAVA上传大文件实现思路,JAVA上传大文件实现解决方案,
前端上传大文件实现方案,js上传大文件实现方法,JavaScript上传大文件实现方法,vue上传大文件实现方法,前端上传大文件实现方法,html上传大文件实现方法,html5上传大文件实现方法,百度webuploader上传大文件实现方法,webuploader上传大文件实现方法,JAVA上传大文件实现方法,
大文件上传的话基本上都是分片来传,网上很多文章讲的不能说乱七八糟只能说完全没用。
JAVA的话主要是负责后端的接口,业务逻辑,功能的实现,比如文件初始化,文件分块,文件块合并,文件信息的查询等。
客户这个项目跟了很长时间了,大概有2年了。实际上客户并不在意使用哪种技术
文件比较大,有50G左右,用户希望能够在网页里面直接上传,一期的时候我们是直接用的HTML5的API,也就是chrome提供的API来做的,但是上线后用户反馈不是特别的好用,用户那边有些电脑用的是WIN7+IE9,chrome的API在ie9里面不支持。但是用户系统是支持的,这就把人整的有点不会了。二期的时候我们还是定制开发了,
前端用了JSP,VUE2,VUE3,后端用了JSP,SpringBoot,IDE用了Eclipse,MyEclipse,因为新项目和老项目都用了两种IDE。
用户要求能够在网页上面上传文件夹,文件夹里面大约有1万多个文件,有大有小,大的有1G~10G,小的有几MB,文件夹上传的时候需要保存层级结构,同时能够将层级结构信息保存到数据库中,同时还需要支持文件夹下载,下载下来的文件夹要和上传的文件夹层级结构一模一样。客户每天都会传输一些资料,功能这块使用频率非常高。
要求支持断点续传,支持进度信息离线存储,用户可能传一半没有传完,下班了,明天上班后继续上传,电脑晚上到点需要关机,支持加密传输,支持国密加密算法SM4,要求支持下载,支持非打包方式下载,浏览器要求支持包含IE在内的所有浏览器,
系统环境要求支持信创国产化,比如银河麒麟,中标麒麟,统信UOS,龙芯,数据库支持MySQL,Oracle,达梦数据库,人大金仓,需要提供前端源码,后端源码,控件源码,公司自己的项目,也有自己的产品,后续需要集成使用,
要求提供7*24小时技术支持服务,提供文档教程,视频教程,远程技术指导,1对1技术支持服务,提供手机,微信,QQ,邮箱,企业微信等联系方式。导入项目:
导入到Eclipse:http://www.ncmem.com/doc/view.aspx?id=9da9c7c2b91b40b7b09768eeb282e647
导入到IDEA:http://www.ncmem.com/doc/view.aspx?id=9fee385dfc0742448b56679420f22162
springboot统一配置:http://www.ncmem.com/doc/view.aspx?id=7768eec9284b48e3abe08f032f554ea2
下载示例:
https://gitee.com/xproer/up6-jsp-eclipse/tree/6.5.40/
工程
NOSQL
NOSQL示例不需要任何配置,可以直接访问测试
创建数据表
选择对应的数据表脚本,这里以SQL为例
修改数据库连接信息
访问页面进行测试
文件存储路径
up6/upload/年/月/日/guid/filename
相关问题:
1.javax.servlet.http.HttpServlet错误
2.项目无法发布到tomcat
3.md5计算完毕后卡住
4.服务器找不到config.json文件
相关参考:
文件保存位置
源码工程文档: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小时内与您取得联系。