當前位置:首頁 » 網頁前端 » web開發大文件存放
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

web開發大文件存放

發布時間: 2022-04-15 20:23:25

① 求web 以上超大文件上傳和斷點續傳伺服器的實現

web 以上超大文件上傳和斷點續傳伺服器的實現
javaweb上傳文件
上傳文件的jsp中的部分
上傳文件同樣可以使用form表單向後端發請求,也可以使用 ajax向後端發請求
1.通過form表單向後端發送請求
<form id="postForm" action="${pageContext.request.contextPath}/UploadServlet" method="post" enctype="multipart/form-data">
<div class="bbxx wrap">
<inputtype="text" id="side-profile-name" name="username" class="form-control">
<inputtype="file" id="example-file-input" name="avatar">
<button type="submit" class="btn btn-effect-ripple btn-primary">Save</button>
</div>
</form>
改進後的代碼不需要form標簽,直接由控制項來實現。開發人員只需要關注業務邏輯即可。JS中已經幫我們封閉好了
this.post_file = function ()
{
$.each(this.ui.btn, function (i, n) { n.hide();});
this.ui.btn.stop.show();
this.State = this.Config.state.Posting;//
this.app.postFile({ id: this.fileSvr.id, pathLoc: this.fileSvr.pathLoc, pathSvr:this.fileSvr.pathSvr,lenSvr: this.fileSvr.lenSvr, fields: this.fields });
};
通過監控工具可以看到控制項提交的數據,非常的清晰,調試也非常的簡單。
2.通過ajax向後端發送請求
$.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請求通知服務端進行初始化操作
this.md5_complete = function (json)
{
this.fileSvr.md5 = json.md5;
this.ui.msg.text("MD5計算完畢,開始連接伺服器...");
this.event.md5Complete(this, json.md5);//biz event

var loc_path = encodeURIComponent(this.fileSvr.pathLoc);
var loc_len = this.fileSvr.lenLoc;
var loc_size = this.fileSvr.sizeLoc;
var param = jQuery.extend({}, this.fields, this.Config.bizData, { md5: json.md5, id: this.fileSvr.id, lenLoc: loc_len, sizeLoc: loc_size, pathLoc: loc_path, time: new Date().getTime() });

$.ajax({
type: "GET"
, dataType: 'jsonp'
, jsonp: "callback" //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名
, url: this.Config["UrlCreate"]
, data: param
, success: function (sv)
{
_this.svr_create(sv);
}
, error: function (req, txt, err)
{
_this.Manager.RemoveQueuePost(_this.fileSvr.id);
alert("向伺服器發送MD5信息錯誤!" + req.responseText);
_this.ui.msg.text("向伺服器發送MD5信息錯誤");
_this.ui.btn.cancel.show();
_this.ui.btn.stop.hide();
}
, complete: function (req, sta) { req = null; }
});
};

在文件上傳完後向伺服器發送通知
this.post_complete = function (json)
{
this.fileSvr.perSvr = "100%";
this.fileSvr.complete = true;
$.each(this.ui.btn, function (i, n)
{
n.hide();
});
this.ui.process.css("width", "100%");
this.ui.percent.text("(100%)");
this.ui.msg.text("上傳完成");
this.Manager.arrFilesComplete.push(this);
this.State = this.Config.state.Complete;
//從上傳列表中刪除
this.Manager.RemoveQueuePost(this.fileSvr.id);
//從未上傳列表中刪除
this.Manager.RemoveQueueWait(this.fileSvr.id);

var param = { md5: this.fileSvr.md5, uid: this.uid, id: this.fileSvr.id, time: new Date().getTime() };

$.ajax({
type: "GET"
, dataType: 'jsonp'
, jsonp: "callback" //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名
, url: _this.Config["UrlComplete"]
, data: param
, success: function (msg)
{
_this.event.fileComplete(_this);//觸發事件
_this.post_next();
}
, error: function (req, txt, err) { alert("文件-向伺服器發送Complete信息錯誤!" + req.responseText); }
, complete: function (req, sta) { req = null; }
});
};

這里需要處理一個MD5秒傳的邏輯,當伺服器存在相同文件時,不需要用戶再上傳,而是直接通知用戶秒傳
this.post_complete_quick = function ()
{
this.fileSvr.perSvr = "100%";
this.fileSvr.complete = true;
this.ui.btn.stop.hide();
this.ui.process.css("width", "100%");
this.ui.percent.text("(100%)");
this.ui.msg.text("伺服器存在相同文件,快速上傳成功。");
this.Manager.arrFilesComplete.push(this);
this.State = this.Config.state.Complete;
//從上傳列表中刪除
this.Manager.RemoveQueuePost(this.fileSvr.id);
//從未上傳列表中刪除
this.Manager.RemoveQueueWait(this.fileSvr.id);
//添加到文件列表
this.post_next();
this.event.fileComplete(this);//觸發事件
};
這里可以看到秒傳的邏輯是非常 簡單的,並不是特別的復雜。
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);
}
});
java部分
文件初始化的邏輯,主要代碼如下
FileInf fileSvr= new FileInf();
fileSvr.id = id;
fileSvr.fdChild = false;
fileSvr.uid = Integer.parseInt(uid);
fileSvr.nameLoc = PathTool.getName(pathLoc);
fileSvr.pathLoc = pathLoc;
fileSvr.lenLoc = Long.parseLong(lenLoc);
fileSvr.sizeLoc = sizeLoc;
fileSvr.deleted = false;
fileSvr.md5 = md5;
fileSvr.nameSvr = fileSvr.nameLoc;

//所有單個文件均以uuid/file方式存儲
PathBuilderUuid pb = new PathBuilderUuid();
fileSvr.pathSvr = pb.genFile(fileSvr.uid,fileSvr);
fileSvr.pathSvr = fileSvr.pathSvr.replace("\\","/");

DBConfig cfg = new DBConfig();
DBFile db = cfg.db();
FileInf fileExist = new FileInf();

boolean exist = db.exist_file(md5,fileExist);
//資料庫已存在相同文件,且有上傳進度,則直接使用此信息
if(exist && fileExist.lenSvr > 1)
{
fileSvr.nameSvr = fileExist.nameSvr;
fileSvr.pathSvr = fileExist.pathSvr;
fileSvr.perSvr = fileExist.perSvr;
fileSvr.lenSvr = fileExist.lenSvr;
fileSvr.complete = fileExist.complete;
db.Add(fileSvr);

//觸發事件
up6_biz_event.file_create_same(fileSvr);
}//此文件不存在
else
{
db.Add(fileSvr);
//觸發事件
up6_biz_event.file_create(fileSvr);

FileBlockWriter fr = new FileBlockWriter();
fr.CreateFile(fileSvr.pathSvr,fileSvr.lenLoc);
}
接收文件塊數據,在這個邏輯中我們接收文件塊數據。控制項對數據進行了優化,可以方便調試。如果用監控工具可以看到控制項提交的數據。
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List files = null;
try
{
files = upload.parseRequest(request);
}
catch (FileUploadException e)
{// 解析文件數據錯誤
out.println("read file data error:" + e.toString());
return;

}

FileItem rangeFile = null;
// 得到所有上傳的文件
Iterator fileItr = files.iterator();
// 循環處理所有文件
while (fileItr.hasNext())
{
// 得到當前文件
rangeFile = (FileItem) fileItr.next();
if(StringUtils.equals( rangeFile.getFieldName(),"pathSvr"))
{
pathSvr = rangeFile.getString();
pathSvr = PathTool.url_decode(pathSvr);
}
}

boolean verify = false;
String msg = "";
String md5Svr = "";
long blockSizeSvr = rangeFile.getSize();
if(!StringUtils.isBlank(blockMd5))
{
md5Svr = Md5Tool.fileToMD5(rangeFile.getInputStream());
}

verify = Integer.parseInt(blockSize) == blockSizeSvr;
if(!verify)
{
msg = "block size error sizeSvr:" + blockSizeSvr + "sizeLoc:" + blockSize;
}

if(verify && !StringUtils.isBlank(blockMd5))
{
verify = md5Svr.equals(blockMd5);
if(!verify) msg = "block md5 error";
}

if(verify)
{
//保存文件塊數據
FileBlockWriter res = new FileBlockWriter();
//僅第一塊創建
if( Integer.parseInt(blockIndex)==1) res.CreateFile(pathSvr,Long.parseLong(lenLoc));
res.write( Long.parseLong(blockOffset),pathSvr,rangeFile);
up6_biz_event.file_post_block(id,Integer.parseInt(blockIndex));

JSONObject o = new JSONObject();
o.put("msg", "ok");
o.put("md5", md5Svr);
o.put("offset", blockOffset);//基於文件的塊偏移位置
msg = o.toString();
}
rangeFile.delete();
out.write(msg);

註:
1. 上面的java部分的代碼可以直接使用,只需要將上傳的圖片路徑及收集數據並將數據寫入到資料庫即可
2. 上面上傳文件使用到了位元組流,其實還可以使用別的流,這個需要讀者自己在下面完善測試
3. BeanUtils是一個工具 便於將實體對應的屬性賦給實體
4. 上傳文件不能使用 request.getParameter("")獲取參數了,而是直接將request解析,通過判斷每一項是文件還是非文件,然後進行相應的操作(文件的話就是用流來讀取,非文件的話,暫時保存到一個map中。)

② web開發中如何上傳一個大文件視頻

如果想要上傳一個大文件、需要使用客戶端了。20M之內的文件勉強可以上傳,但是由於伺服器會默認限制請求大小,所以需要修改相應的配置文件。

③ web的存儲技術

引言
隨著電網商業化運營的深入開展和電網規模的擴大,電力系統的實時監控、分析決策、信息發布及人員培訓等方面的需求水平也越來越高,各部門、人員之間的信息交互也越來越多,越來越頻繁,同時要求具有在不同地域對數據的讀寫功能。信息資源共享及數據的異地讀寫成為了一個突出的問題。
2 WEB方案的提出
2.1 從對數據的共享需求來看
從數據共享分類大致分為兩類:1)只要求對數據進行查詢、瀏覽,屬於前台共享;2)需要將數據進行再處理之後使用,屬於後台共享。
這里涉及到的需求都可以通過前台共享(WEB模式)來實現。而前台共享實現的方式主要有兩種:Client/Server模式 和Browser/Server模式(WEB發布)。現將兩種模式的對比如下:
(1)Client/Server模式是傳統的解決方案,它在一些傳統應用上非常勝任,但對於當今的需求,就有些捉襟見肘。該模式中關系資料庫管理系統可處理的並發用戶是有限的,不超過50個(一般二三十個並發用戶數就可觀了)。但隨著網路規模的急劇擴大,有許多傳統的方法已經不足以應付需求的急劇增長。而採用Browser/Server方式只需要在伺服器上建立相應的Web服務程序,對資料庫的操作由Web伺服器集中完成,不存在並發用戶的限制問題。
(2)運用傳統的模式,每台客戶端機器都必需安裝應用軟體,造成了軟體開發、安裝、升級、維護上的大量人力、物力、財力的耗費。而Browser/Server方式在客戶端幾乎不需要做任何修改,系統軟硬體的安裝,升級、維護僅集中在伺服器端,且Web瀏覽器具有統一的用戶界面,形式簡單,操作方便。
(3)Client Server模式在共享區域上也有很大的局限性,它不能打破企業中各信息系統各自為政,互相獨立的局面。而Web技術(基於Browser/Server模式)帶來了新的企業網路解決方案——Intranet。Intranet是一個以TCP/IP為基礎,集成Web技術而形成的企業內部信息網路,主要提供信息服務,避免了信息孤島現象。企業用戶無論在企業內部,還是在家中,甚至在外出差,都可以通過區域網,或通過電話線運用遠程訪問服務(RAS)進入Intranet,真正實現內部信息的唾手可得。
根據數據面向的訪問群范圍較廣且較分散的特點,我們決定採用Browser/Server模式(即Web發布技術)來實現對數據的共享。
2.2 從對數據讀寫的類型來看
從數據讀寫分類也可分為兩類:1)數字、字元類型; 2)文件、圖表類型。
對於數字、字元類型的讀寫需求可用WEB模式實現。對文件、圖表類型關鍵在於資料的存儲模式。雖然通過人工錄入的方式可將數據轉錄,但通過第三方軟體可完美的實現文件的網路存儲,不需轉化。而此軟體的操作管理也是基於WEB伺服器模式的,即Web發布技術。
3系統設計思想
我們針對不同的數據存儲、讀寫要求,設計了相應方案。
3.1 關於寫入
3.1.1 歷史數據處理
(1)不需更新、不需再處理的的數據進行文件掃描、上傳處理;
(2)要更新的數據採用WEB伺服器進行文件存儲,可再次在線編輯;
(3)需處理的數據進行人工錄入。
3.1.2 新數據處理
(1)可通過SCADA系統獲取實時數據,直接進行自動存儲;
(2)須更新的數據採用網頁伺服器進行文件存儲,可再次在線編輯;
(3)不需更新、不需再處理的的數據可進行文件掃描、上傳處理;
(4)需處理的數據通過人工錄入方式填寫。
3.2 關於讀取
提供多元化的數據錄入、讀取樣式,能符合各種數據讀、寫的要求。並且針對不同的錄入要求採用相應的錄入方式,可節省大量人力。讀取方式分兩種:
(1)區域網內用戶端通過IE直接訪問伺服器站點;
(2)遠程用戶通過撥號訪問伺服器站點。
4 系統技術實現
4.1 WEB結構
Web結構的核心是一台Web 伺服器,它一般由一台獨立的伺服器承擔,資料庫伺服器為信息管理系統資料庫伺服器,各客戶機數據請求均由Web伺服器提交給資料庫伺服器,再由Web伺服器返回發給請求的客戶機。
這里的Web伺服器可設為的內部網,另一端接入企業Intranet,這樣既避免了內部網直接暴露於外部,又使內部都可訪問到Web站點。
4.2 WEB的軟硬平台
大多數Web伺服器都是為一種操作系統進行優化的,所以選擇Web伺服器時,需要和操作系統聯系起來考慮。IIS(Internet Information Server)是微軟Windows2000/NT自帶的Web伺服器,具有與操作系統的親和性,並繼承了Microsoft產品一貫的用戶界面。所以,我們採用以下Web平台:
(1)硬體:伺服器(PII300以上,128MB 以上RAM,100 Mbit/s網卡),客戶機(PII200以上64 MB以上RAM,100Mbit/s網卡) ;
(2)軟體:伺服器(Windows 2000/(NT Server4.0)中文版,建議Server Pack 5.0以上,IIS 4.0 ),客戶機(Microsoft Win 9X中文版,IE 4.0以上瀏覽器) ;
(3)網路:建議為100Mbit/s乙太網。
4.3 WEB開發
4.3.1開發工具
(1)ASP是Microsoft用於生態動態網頁的技術,它建立在IIS伺服器的基礎上。在ASP中可以利用ADO方便地實現對資料庫的訪問。它提供了連接任何兼容ODBC的資料庫的能力,通過ODBC連接,從資料庫伺服器獲取數據;執行更新、刪除、添加數據,獲取ODBC的錯誤信息等。ASP還支持多種腳本語言,如JavaScript,PerlScript以及VBScript,運用這些腳本語言可以靈活、動態的生成HTML文本。腳本語言還可以方便的調度和控制大量ActiveX控制項和Java小程序。即可使ASP相對於原有的CGI技術,具有開發周期短、調試方便、兼容性好、經濟易行等特點。所以,在軟體製作中,我們採用了ASP技術,並運用Java編制了一些適合自身應用的Applet控制項。
(2)以Microsoft 公司出品的SharePoint軟體作為網路文件存儲的基本結構。可通過WEB頁直接進行文件(Word,Excel,PowerPoint,Txt,Html)的網路存儲、修改。通過對其中源碼的修改,使之適應我們的實際使用情況。同時,對其WEB共享文件夾的安全許可權進行設置,達到網路安全的功能。
4.3.2網路用戶管理 網路用戶的創建是基於伺服器的本機用戶帳號。所有許可權集中於伺服器於一身,便於維護人員集中管理。維護人員足不出戶就可對每個用戶發出命令,允許或禁止用戶的讀、寫操作。為了方便用戶修改個人網路帳戶及密碼,我們通過網路WEB技術提供了系統帳戶密碼修改頁面,使得用戶不論身在何處,只要能訪問該WEB伺服器,就好像在辦公室內上班一樣方便。
5 系統安全
除了平台、開發環境和功能設計外,網站的安全性問題也不容忽視。從硬體的安全形度考慮,我們為主伺服器設置了一台備份伺服器,同時將WEB伺服器設為網關使用雙網卡,對內部機器IP進行合理規劃。在軟體方面,凡是用於客戶端的腳本(主要是響應客戶端時間)全部採用JavaScript腳本編寫。伺服器端腳本(主要是用戶許可權設置及資料庫操作)均採用運行於伺服器端的 VbScript腳本編寫,ODBC介面及用戶許可權跟蹤進行獨特加密。這樣,對資料庫操作及用戶身份驗證的腳本在伺服器端編譯執行,相對於客戶端是看不見的,同時傳遞時進行了多次加密、校驗。
在防護上堅持使用正版軟體,並時刻注意升級庫,做到防患於未然。
6 結語
基於WEB的電網信息管理及辦公應用系統不但具有易於開發、使用和維護的特點,而且易於和其他系統介面及協同工作,同時向下和向上兼容過去和將來的辦公模式。OFFICE文擋的網路存儲和基於網路資料庫的數據存儲方式,既保留了以前的工作習慣,同時提供了網路數據存儲的工作方法。能通過此系統,使得工作人員向完全網路辦公模式轉化,有一個循序漸進的過程。

④ web伺服器可以用來存儲大量文件數據嗎

  1. 如果是零星碎片化的數據文件的話 web伺服器是可以使用來存儲數據的。但是如果是大量需要上傳下載讀取等操作的數據的話,還是不建議使用web伺服器來存儲數據。

  2. 原因如下:web伺服器本身並不是運行數據存儲服務的,大量的文件寫入或者讀取都會造成帶寬的佔用,對web服務如打開網頁,資料庫寫入讀取 都會造成佔用。

  3. 解決辦法:可以使用網盤來存儲大容量的文件數據。目前來說還是比較不錯的。還可以自己搭建nas服務來存儲數據和文件,通過外網協議把文件共享出來,這種方法需要硬體支持,現成的nas服務設備也很多,如群輝 等 可以解決存儲數據的問題。

⑤ 求c#怎麼實現web端上傳超大文件

課題很大,基本原理是文件切片+服務端存儲切片+切片偏移值記憶+切片合並。細節很多,自己找資料看吧。

⑥ java web項目中有很多的圖片,如何存放

1.
確實如你所說,基本沒有上線的項目會將圖片放到webroot,這樣重新上線時圖片就都會丟失
2.
如果圖片不大並且資源很重要可以放在資料庫(二機制存儲,不常用)
3.
圖片可以單獨存放在硬碟的某個目錄,但不是項目目錄下,所以讀取圖片時都需要文件流來操作(小項目比較多)
4.
對於圖片多或者項目比較大的時候就會考慮使用CDN伺服器,專門的一個服務來存圖片(大項目基本都是)

前端怎麼實現web端上傳超大文件

第一點:系統的配置

⑧ 求php怎麼實現web端上傳超大文件

加大PHP上傳文件大小的限制,是通過修改PHP.INI文件來實現,但是這個支持是有限度的,因為WEB協議本為下載而生,超大文件的上傳是FTP的專利。

PHP用超級全局變數數組$_FILES來記錄文件上傳相關信息的。

1.file_uploads=on/off
是否允許通過http方式上傳文件
2.max_execution_time=30
允許腳本最大執行時間,超過這個時間就會報錯
3.memory_limit=50M
設置腳本可以分配的最大內存量,防止失控腳本佔用過多內存,此指令只有在編譯時設置了
--enable-memory-limit標志的情況下才生效
4.upload_max_filesize=20M
允許上傳文件的最大大小,此指令必須小於post_max_size
5.upload_tmp_dir
上傳文件臨時存放目錄
6.post_max_size=30M
允許post方式可以接受最大大小
$_FILES['myFile']['name'] 客戶端上次文件的原始名稱。
$_FILES['myFile']['type'] 文件的 MIME 類型,需要瀏覽器提供該信息的支持,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳文件的大小,單位為位元組。
$_FILES['myFile']['tmp_name'] 文件被上傳後在服務端儲存的臨時文件名,一般是系統默認。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函數設置是不起作用的。
$_FILES['myFile']['error'] 和該文件上傳相關的狀態碼。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的說明:(它們在PHP3.0以後成了常量)
UPLOAD_ERR_OK
值:0; 沒有錯誤發生,文件上傳成功。
UPLOAD_ERR_INI_SIZE
值:1; 上傳的文件超過了 php.ini 中 upload_max_filesize 選項限制的值。
UPLOAD_ERR_FORM_SIZE
值:2; 上傳文件的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。
UPLOAD_ERR_PARTIAL
值:3; 文件只有部分被上傳。
UPLOAD_ERR_NO_FILE
值:4; 沒有文件被上傳。
值:5; 上傳文件大小為0.
文件被上傳結束後,默認地被存儲在了臨時目錄中,這時您必須將它從臨時目錄中刪除或移動到其它地方,如果沒有,則會被刪除。
也就是不管是否上傳成功,腳本執行完後臨時目錄里的文件肯定會被刪除。
附:修改PHP上傳文件大小限制的方法
1. 一般的文件上傳,除非文件很小.就像一個5M的文件,很可能要超過一分鍾才能上傳完.
但在php中,默認的該頁最久執行時間為 30 秒.就是說超過30秒,該腳本就停止執行.
這就導致出現 無法打開網頁的情況.這時我們可以修改 max_execution_time
在php.ini里查找
max_execution_time
默認是30秒.改為
max_execution_time = 0
0表示沒有限制
2. 修改 post_max_size 設定 POST 數據所允許的最大大小。此設定也影響到文件上傳。
php默認的post_max_size 為2M.如果 POST 數據尺寸大於 post_max_size $_POST 和 $_FILES superglobals 便會為空.
查找 post_max_size .改為
post_max_size = 150M
3. 很多人都會改了第二步.但上傳文件時最大仍然為 8M.
為什麼呢.我們還要改一個參數upload_max_filesize 表示所上傳的文件的最大大小。
查找upload_max_filesize,默認為8M改為
upload_max_filesize = 100M
另外要說明的是,post_max_size 大於 upload_max_filesize 為佳.