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小時內與您取得聯系。