NX的文件上傳實例

来源:http://www.cnblogs.com/shouce/archive/2016/06/01/5548354.html
-Advertisement-
Play Games

公司產品中一直是採用 flash 實現文件上傳功能,但用戶的需求多了以後遇到了越來越多難以解決的問題,最後試著用碩正提供的freeform、小型頁面控制項來解決。 碩正文件上傳的實現途徑有3、4種,由於公司產品發佈的需要,就選擇了其中的 httpPost 方案,其它的象 ftp、Http put儘管也 ...


公司產品中一直是採用 flash 實現文件上傳功能,但用戶的需求多了以後遇到了越來越多難以解決的問題,最後試著用碩正提供的freeform、小型頁面控制項來解決。
  碩正文件上傳的實現途徑有3、4種,由於公司產品發佈的需要,就選擇了其中的 httpPost 方案,其它的象 ftp、Http put儘管也是不錯的選擇,但需要另外建站,或涉及許可權問題,恐怕最終用戶的部署維護會吃不消。
  httpPost方案還有一個非常好的優點,就是文件上傳後是保存到文件還是保存到資料庫,都很容易實現。

  我們的需求以及最終實現了的功能特點在此先羅列一下:
  1. 支持多文件上傳;
  2. 支持超過4G的大文件上傳;
  3. 使用碩正的Zip選項,壓縮上傳,以減輕帶寬壓力;
  4. 支持斷點續傳,記憶對上次失敗的發包位置;
  5. 支持非同步上傳,免得在上傳大文件時瀏覽器卡死;
  6. 有進度條的圖示,我們沒有採用碩正自帶的進度條,而是用js自己寫了一個,裡面的信息更多,界面更友好;
  7. 可以隨時取消上傳;

  結合碩正文檔,我們完成了開發,最終的界面如下:

  開始上傳:
  

  上傳中:

  
  上傳結束:

  
  

  怎麼樣, 功能很完備吧?碩正控制項是 2px X 2px 躲在左上角,平時看不到。

  如下是源碼中的關鍵部分:
    客戶端js: Upload_Client.js
    後端C#: Upload_Server.aspx.cs

  有幾點須說明:
  1. 必須採用分包,設定包的尺寸(PartSize),包的大小要適中,太大的話進度條步進太慢,太小的話碩正發起的Request太多會影響效率;
  2. 由於是非同步上傳,必須充分利用碩正 OnEvent 事件,進度條上的信息就是來自事件參數的;

  如下按工作步驟逐段分析一下這個客戶端的js:
  步驟一.打開碩正套件提供的對話框,選擇文件
  
  

  步驟二.上傳
  
  

  步驟三.發起上傳
  

  步驟四.偵聽上傳事件
  
   

  說明一下:源碼中的“Download”的部分,是和上傳無關的。其實我們同時也實現了文件下載的功能,用的是碩正全局函數中的“Download”函數,由於下載比較簡單,我們在此就不作分析了。

  最後,任務圓滿完成。和以前的flash上傳相比,雙方各有優劣,以下列出一些對比:
   Supcan的優勢
  1.1 使用簡單,後臺基本只需要負責接收數據即可, Flash的 http Body中同時安插了上傳參數和文件的二進位流,二者夾雜在一起導致後端解析異常複雜,一旦涉及大數據必須實現介面HttpModule以繞過IIS對文件大小的限制(預設4M),換之以底層抽取Http中的數據,實現難度大,數據接收失敗率高,而且後期維護較繁瑣。而碩正的http body中就是純數據,根本不需要解析它,所有的控制參數都安置在URL中,後端解析非常清晰:

  這些參數中還有數據包的MD5參數,後端能輕易驗證數據包的正確性;
  1.2 Flash對超大數據支持不足,而Supcan則提供了超過4G的超大數據上傳支持;
  1.3 Flash不支持通過傳入文件路徑進行文件上傳方式,而Supcan能很好支持通過路徑進行文件上傳;
  1.4 Flash不支持斷點續傳,Supcan本身就是通過數據包方式傳輸到後臺,原生支持斷點續傳,只要在後端保存已上傳的塊數,即可支持斷點續傳;
  1.5 Supcan支持客戶端壓縮,節省帶寬。
   

    Flash的優勢
  2.1 瀏覽器支持多,能很好相容大部分瀏覽器,Supcan支持主流瀏覽器,但在firefox效果不佳,在打開文件選擇對話框時會導致控制項崩潰情況,碩正的答覆是與Firefox的消息處理有底層衝突,無法解決;
  2.2 Flash事件更豐富,提供很多事件介面給開發者調用;
  2.3 Flash文件上傳隊列做的比較好,能自動逐個上傳文件,而Supcan需要在js中迴圈調用;
  2.4 Flash上傳界面支持自定義,允許創建豐富的UI.


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ...
  • 軟體測試的分類* 黑盒測試 * 測試邏輯業務* 白盒測試 * 測試邏輯方法 根據測試粒度 * 方法測試:function test * 單元測試:unit test * 集成測試:integration test * 系統測試:system test 根據測試暴力程度 * 冒煙測試:smoke te ...
  • SecondaryNameNode是用來合併fsimage和edits文件來更新NameNode和metadata的。 其工作流程為: 1.secondary通知namenode切換edits文件 2.secondary從namenode獲得fsimage和edits(通過http) 3.secon ...
  • DAYOFWEEK(date) 返回日期date是星期幾(1=星期天,2=星期一,……7=星期六,ODBC標準)mysql> select DAYOFWEEK('1998-02-03'); -> 3 WEEKDAY(date) 返回日期date是星期幾(0=星期一,1=星期二,……6= 星期天)。  ...
  • (1) 選擇最有效率的表名順序(只在基於規則的優化器中有效): Oracle的解析器按照從右到左的順序處理FROM子句中的表名,FROM子句中寫在最後的表(基礎表 driving table)將被最先處理,在FROM子句中包含多個表的情況下,你必須選擇記錄條數最少的表作為基礎表。假如有3個以上的表連 ...
  • 簡介 死鎖的本質是一種僵持狀態,是多個主體對於資源的爭用而導致的。理解死鎖首先需要對死鎖所涉及的相關觀念有一個理解。 一些基礎知識 要理解SQL Server中的死鎖,更好的方式是通過類比從更大的面理解死鎖。比如說一個經典的例子就是汽車(主體)對於道路(資源)的徵用,如圖1所示。 圖1.對於死鎖的直 ...
  • 引導工具GRUB詳解 引導工具GRUB詳解 引導工具GRUB詳解 導讀 引導程式是駐留在硬碟第一個扇區(MPR、主引導記錄)的程式。GRUB是一個功能強大的多系統引導程式,專門處理Linux與其它操作系統共存的問題。下麵就由我介紹一下grub.conf文件里的具體內容及其含義。 使用一下命令可以查看 ...
  • 人們對決策樹的使用 決策樹常常被應用於數據挖掘之中,是最基礎的演算法之一,幾乎每一個學習過數據挖掘的朋友都知道決策樹。但還原決策樹本來的用途,它被用於一些決策或決定時,還是比較實用和直觀的。其樹型結構指導人們進行在面對某個決策時,先關註其中幾個最重要的方向,這幾方向定下來後,再細分下去。近年來泳道路, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...