HTTP協議下用Web Service上傳大文件的解決方案
2024-07-09 22:47:04
供稿:網友
用HTTP協議上傳大文件也許是個不好辦的問題。主要是它的不連續性,使得上傳文件感覺很“危險”。特別是很大的文件(幾百MB甚至是上G的文件),心里總覺得不踏實,一不小心就會出現問題,而一但出現問題就無法繼續上傳,這是很郁悶的。
后來在一些網站上找到一些上傳文件的組件,但都是要用到一些COM組件。至于后來的ASP.net下上傳大文件的解決方案,我也做過一個組件,后來發現根本就不用自己寫什么組件,利用ASP.net自己的上傳方法也可以解決大文件上傳,真是郁悶的要死了。。。。
回想之后,決定用Web service來做一個文件上傳,還是利用HTTP協議,這樣不用在服務器上做太多的變動,而客戶端也簡單。
首先是解決方案的設計:因為Web service可以利用SOAP來傳遞數據,而且可以傳遞十進制數據,因此可以想到,在服務上公開一個方法,參數可以是byte數組,這樣可以把文件分塊的上傳到服務器。這一解決方法我做過,但速度很慢。后來在MS上找到一些文章,用MS最新公開的服務組件上傳文件,速度快了很多。而自己所要做的就是組織一些安全性的問題。
部份代碼:Upload Instance
代碼如下:
using System;
using System.IO;
using Microsoft.Web.Services2;
using Microsoft.Web.Services2.Dime;
namespace Webb.WAVE.WinUpload
{
/**//// <summary>
/// Summary description for Controls.
/// </summary>
public class UploadInstance2
{
Fields#region Fields
private string m_GUID;
private DateTime m_uploadTime;
private long m_fileLength;
private long m_currentPoint;
private string m_pathOnserver;
private long m_userID;
#endregion
Properties#region Properties
public long UserID
{
get{return this.m_userID;}
set{this.m_userID=value;}
}
public string GUID
{
get{return this.m_GUID;}
set{this.m_GUID=value;}
}
public DateTime UploadTime
{
get{return this.m_uploadTime;}
set{}
}
public long FileLength
{
get{return this.m_fileLength;}
set{this.m_fileLength=value;}
}
public long CurrentPoing
{
get{return this.m_currentPoint;}
set{this.m_currentPoint=value;}
}
public string PathOnServer
{
get{return this.m_pathOnserver;}
set{this.m_pathOnserver=value;}
}