.NET jqueyは、前後端部64、大サブファイルアップロードのプログレスバーを分離しました

------------------------------------------ ------エフェクトプレビュー------------------------------------

 

------------------------------------------ HTML ------- -----------------------------------

ファイルをアップロード

 <入力名= "ファイル名が" =を受け入れる "ZIP" クラス= "BTN BTN原色" タイプ= "ファイル" ファイル名= "" のonchange = "imgChange(イベント)">

プログレスバーコード

<DIV ID = "コース">
<DIV CLASS = "速度"> </ div>
<スパン> 0%</スパン>
</ div>

- - - - - - - - - - - - - - - - - - - - - クラス - - - - -----------------------------------

/ *样式2 * /
.FILE {位置:相対;表示:インラインブロック;背景:#1 D0EEFF;ボーダー:1ピクセル固体#99D3F5;ボーダー半径:4PX;パディング:12ピクセル4PX;オーバーフロー:隠された;色:#1E88C7 ;テキスト装飾:なし;テキストインデント:0、行の高さ:20ピクセル;}

.FILE入力{位置:絶対;フォントサイズ:100ピクセル、右:0;上部:0;不透明度:0;}

.FILE:ホバー{背景:#AADFFD;ボーダー色:#78C3F3;色:#004974;テキスト装飾:なし;}

#Course {オーバーフロー-X:隠されました。オーバーフロー-Y:隠されました。幅:200pxの;背景色:#dadada。位置:相対; 高さ:20ピクセル; マージントップ:2ピクセル。空白:正常;}
#Course .rate {幅:0%。背景色:#F00; 高さ:20ピクセル;}
#Courseスパン{表示:ブロック; フロート:右;右:0PX。トップ:0PX。Zインデックス:1。位置:絶対;テキスト整列:右;}

JS ------- ------------------------------------------ ------------------------------

VAR FILEDATA = NULL; //ファイル
関数imgChange(E){
// console.info(e.target.files [0]); //画像ファイル
varファイル= e.target.files [0] .nameの、
VaRのstrFileName = file.replace(/(.*\/)*([^.]+).*/ IG、 "$ 2"); // サフィックス削除

するvar AllImgExt = ".zipファイルを|";
VARのEXTNAME = file.substring( file.lastIndexOf( ""))toLowerCaseメソッド (); //( すべての文字パスすべて小文字)
IF(AllImgExt.indexOf(EXTNAME + "|")== -1){
のErrMsg =「 。ファイルの「+ AllImgExt +」タイプのアップロードを許可していないファイルタイプをアップロードしてください、現在のファイルの種類がある「+ EXTNAME;
アラート(のErrMsg);

$ヴァル((」INPUT [名= fileNameに] .panelボックス・ボディ「)。 "");
FILEDATA = nullが、
falseに戻る;
}他{
VARのDOM = $( 'INPUT [名= "FILENAME"]')[0];
//コンソール。情報(dom.value); //これは、ファイルCへのパスです:\ fakepath \アイコン(5).PNG
//console.log(e.target.value);//このパスおよびファイルはdom.value上記と同様である
$( '入力[NAME = " FILENAME"]')。ATTR( "ファイル名"、DOM .VALUE);
... IF($( "ボックス・ボディ.panel-グループ.input")EQ(0).find( "INPUT")ヴァル()== ""){
$(「ボックス.panel。 。 ")EQ(0).find(" -body .input-グループINPUT「)ヴァル(strFileName);
}
VARリーダーFileReaderの新しい新=();
reader.onload =(関数(ファイル){
return関数(E) {
FILEDATA = this.result; //これはBASE64のデータである
};
})(e.target.files [0]);
reader.readAsDataURL(e.target.files [0]);
真に戻ります;
}
}

//ファイルを追加

PS:帰国後、正常に追加された後、GUID、IDのプロジェクトを繰り返す返却する必要があり、ファイルの絶対パスを保存

$アヤックス({
URL: "../User/AddConfigFile"、
キャッシュ:偽、
非同期:真、
タイプ: "ポスト"、
データ:{}、
データ型: "JSON"、
成功:機能(jsonData){
場合( jsonData.Succeed){
UploadingFileData(FILEDATA、jsonData.Data.Guid、jsonData.Data.ConfigFileId、jsonData.Data.FileUrl);
}他{
アラート(jsonData.Error);
}
}
})

 

UploadingFileData機能(データ、GUID、ID、パス){

VAR =アイデンティティCookie_Data.Identity;
VAR = overallLength data.length; //全長
VARパケット= 1024 * 1000;回//数パケット
//は小数点以下を切り上げ整数部分に1つのを加えた。
VAR = bagNum Math.ceil(overallLength /パケット);パケットの総数//
//サブリクエスト
$( '#のAddData関数')ATTR (、 '無効' "真");. // 無効に追加プロパティ

BatchData(0)。
関数BatchData(I){
VAR次に= I + 1; //当前页数
VAR kpNum1 =(iはパケットを*); //开始
VAR kpNum2 =(次に*パケット); //开始
するvar FILEDATA = data.substring(kpNum1 、kpNum2); //每次发送的数据
$アヤックス({
URL: "../User/UploadingFileData"、
キャッシュ:偽、
非同期:真、
タイプ: "ポスト"、
データ:{アイデンティティ:アイデンティティ、ConfigFileId: ID、のGUID:GUID、パス:パス、FILEDATA:FILEDATA、bagNum:bagNum、次に:次に、overallLength:overallLength}、
データ型: "JSON"、
成功:関数(jsonData){
IF(jsonData.Succeed){
IF(bagNum >次へ){
BatchData(NEXT);
CourseNum(bagNum、次に+ 1);
//window.setTimeout(function(){
BatchData //(NEXT);
// CourseNum(bagNum、次に+ 1);
//}、100);
}そうでなければ(次に== bagNum){IF
$( '#1 AddData関数')removeAttr( "無効")。 // disabled属性削除
;データ()
クローズ();
警告( "正常にファイルのアップロード");
FILEDATA = "";
}
}他{
アラート( ""ファイルを失敗した);
CourseNum(1、0);
$を( '#AddData')removeAttr( "無効 ");. // 削除無効性
FILEDATA = "";
}
}
})

}

}
//プログレスバー
関数CourseNum(COUNT、NUM){
VARのNUM =のparseInt((NUM * 100)/ COUNT)+ "%";
$( "#コース、.rate")の幅(NUM);.
$( "#コース、スパン")HTML(NUM);
{(NUM == "100%")であれば
$( "#コース.rate")、CSS( "背景色"、 "#1 12ff00")。
}
}

-----------------------------------------.net背景インタフェース----- --------------------------------------

リターン1.後のIDの増分は、GUID正常に追加データベース、およびあなたが絶対パスを保存したフォルダを追加します。

 

2.サブアップロードされたファイルのインターフェース、プロジェクトのアイデンティティユーザの識別は、無視することができます

 

 

//字典
static Dictionary<string, List<RequestFile>> openWith = new Dictionary<string, List<RequestFile>>();
public ActionResult UploadingFileData()
{
try
{
string Identity = Request.Form["Identity"].ToString();
//Users User = new UserOnLineBLL().ISIdentity(Identity);
string Path = Request.Form["Path"].ToString();
int ConfigFileId = int.Parse(Request.Form["ConfigFileId"].ToString());
string FileData = Request.Form["FileData"].ToString();//分包数据
int BagNum = int.Parse(Request.Form["BagNum"].ToString());//共多少包
int Next = int.Parse(Request.Form["Next"].ToString());// 第几包
string OverallLength = Request.Form["OverallLength"].ToString();//总长度。
string Guid = Request.Form["Guid"].ToString();


if (string.IsNullOrEmpty(Guid))
{
Response.Succeed = false;
Response.Error = "传输失效";
return Json(Request);
}

RequestFile requestFile = new RequestFile() { Guid = Guid, Count = BagNum, Index = Next, Data = FileData };
if (requestFile.Count > 1)//文件总量大于1视为切割文件
{
//判断是否存在
if (openWith.ContainsKey(Guid)) // True
{
var lsdata = openWith[Guid];
//判断此次包是否已拥有(排除网络原因或者其他原因导致数据包重叠而影响后期的合并)
if (!lsdata.Exists(it => it.Index == requestFile.Index))
{
lsdata.Add(requestFile);
//判断
if (lsdata.Count == requestFile.Count)
{
RequestFile onerftemp = new RequestFile();
onerftemp.Index = 1;
onerftemp.Count = 1;
onerftemp.Guid = lsdata.First().Guid;
onerftemp.Data = "";
//合并处理
var temp = lsdata.OrderBy(it => it.Index);
foreach (var item in temp)
{
onerftemp.Data += item.Data;
}
//清除已合并的多文件碎片
openWith.Remove(Guid);
//此为多文件合并后的业务处理
//调用业务处理
FileClass FileClass = new FileClass().FileData(onerftemp.Data);
Response.Succeed = true;
Response.SucceedEnd = Base64Convert.Base64ToFileAndSave(FileClass.Data, Path);


}
else Response.Succeed = true;
}
else Response.Succeed = true;
}
else
{
//初始化在添加
List<RequestFile> ls = new List<RequestFile>();
ls.Add(requestFile);
openWith.Add(Guid, ls);
Response.Succeed = true;
}
}
else
{
//此为小个单文件的业务处理
//调用业务处理
FileClass FileClass = new FileClass().FileData(requestFile.Data);
Response.SucceedEnd = Base64Convert.Base64ToFileAndSave(FileClass.Data, Path);
Response.Succeed = true;
}

#endregion
//全部处理成功进入
if (Response.SucceedEnd)
{
//方法1:去文件内获取
string Size = FileHelp.PrintFileVersionInfo(Path);
//方法2:直接计算
//string Size = FileHelp.GUIStyleCalcSize(Double.Parse(OverallLength));
int ret = new ConfigFileBLL().UpConfigFileSiZeWhereAutoId(ConfigFileId, Size);
}

return Json(Response);
}
catch (Exception ex)
{
Response.Succeed = false;
Response.Error = ex.ToString();
return Json(Response);
}
}

 ---------------------------------------------------------------------------------------------------------

声明:自创数据分包, 使用请在下方留言,多多交流。

   对大家有帮助还望留言支持。

おすすめ

転載: www.cnblogs.com/myshi/p/11199686.html