AspnetUpload没有断点续传功能。
很多人都希望AspnetUpload能够像ftp一样可以断点续传,但是我认为是无法实现的。
首先,<input type=file>控件的value属性是只读的,那么即使记录了未上传完全文件的位置,我们也无法让客户端主动开始请求;
另外一个原因,每次post请求都是一个完整的合乎rfc规范的请求文本,必须重头开始分析,这是关键原因。当然也可以只分析而不保存来实现假的断点续传,但是我觉得没什么必要这么做。
用 IE 作客户端根本无法,无机会,实现真正的有效断点续传 upload!
Application Client 倒是可以实现:
WebClient.UploadData
or
WebRequest
建议直接用 WebRequest 实现(当然是参考 Reflector WebClient)
我曾经WebRequest 实现过:
分块断点续传(Upload)的应用程序客户端及其配套的 Server 的 ASPX!
实际就是:
不但要传二进制数据另外就是 该段二进制数据在原文件的起止位置(相当于放在两个普通的文本域里)还有文件名之类的文本域等!
Server 的 ASPX 要编程支持该约定!
但后来发现:
其实实现 支持 分块断点续传(Upload)的应用程序客户端 的 WebService 方案(Server/Client)代码都更简单!
不是不可以实现,只是做为我个人觉得,应用的人不会很多,没有必须在IE中这样做
@by lion
正如bestcomy说的一样,不能实现从客户端断点续传到服务器端的根本原因是因为每次post请求都是一个完整的合乎rfc规范的请求文本,必须重头开始分析。不过从IE上传文件的应用将会越来越多。B/S架构的应用,我相信也会越来越广。我做的几个OA系统都是基于B/S架构的,需要用到IE上传文件。ASP.NET的出现更是为B/S架构的推广奠定了坚实的基础。
我開發過一個OCX有點類似網路上那種縱橫HTTP上傳那種,不過是要連SERVER端都做客制化,我的經驗遇到比較大的問題是在SERVER端,說寫到緩衝區或是資料庫的都是蠢到爆的想法,你想想要是超過1g的時候主機都擺你的緩衝大概其他程式都不用跑了,資料庫片段對照碼也是笨想法;要是遇到大型檔案,你怎麼可能一個一個區段去做比對;把分段資料直接寫到資料庫更好笑,因為即使資料庫可以存放,你認為資料庫在運作時效能會有多高?這些想法我認為都只適合不超過一百M的小檔可以這樣做;我的經驗主要的問題有兩個,一個是客戶端的客制化,如何讓客戶端知道有哪些檔案區段沒有上傳,如何在一段時間上傳失敗後自動去重新上傳;這部分用ATIVEX物件不難處理;南的在於大量的資料船上SERVER的驗證與重組;我認為才是比較難的議題;客戶端那些切檔案與傳檔的標準HTTP協議程式到處都可以抓得到,對我而言反而只是剛開始的冰山一角吧!