怎么从服务器下载大文件?(在线等) 本人在Win Form编程中,想通过Web Service从服务器从下载大小为几百M的文件.我现在只能实现大小为几十M的文件的下载.请高人指教. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /// <summary> /// 下载升级文件 /// </summary> /// <param name="FileName">文件名称</param> /// <param name="ByteOffset">偏移地址</param> /// <param name="ByteLength">下载长度</param> /// <returns>编码字符</returns> [WebMethod(EnableSession = true, Description = "下载升级文件")] public string DownloadByteFile(string FileName, long ByteOffset, long ByteLength) { try { string FilePath = Server.MapPath(DownLoadPath) + "\\" + FileName; FileStream fstream = new FileStream(FilePath, FileMode.Open); byte[] farray = new byte[ByteLength]; fstream.Position = ByteOffset; fstream.Read(farray, 0, (int)ByteLength); fstream.Close(); return Convert.ToBase64String(farray); } catch (Exception) { return string.Empty; } } string fileString = service.DownloadByteFile(dinfo.DownLoadFileName, dinfo.DownLength, dinfo.ByteLength); if (fileString != string.Empty) { MemoryStream mstream = new MemoryStream(Convert.FromBase64String(fileString)); byte[] farray = new byte[mstream.Length]; mstream.Read(farray, 0, (int)mstream.Length); mstream.Close(); FileStream fstream = new FileStream(dinfo.DownLoadFileName, FileMode.Append); fstream.Write(farray, 0, farray.Length); fstream.Flush(); fstream.Close(); dinfo.DownLength = dinfo.DownLength + farray.Length; dinfo.SaveToXMLFile(FileName); this.progress.Value = (int)(dinfo.DownLength <= dinfo.FileLength ? dinfo.DownLength : dinfo.FileLength); this.lblWarning.Text = "下载升级文件 - " + dinfo.DownLoadFileName + "[" + dinfo.DownLength + "/" + dinfo.FileLength + "]"; this.lblWarning.Refresh(); if (dinfo.DownLength >= dinfo.FileLength) { this.btnOK.Text = "完成(&F)"; break; } } 我用的方法和你的几乎一样,不同的是:我retrurn 的是 一个byte[] . byte[] 不知道反正我下载300M的没问题而且可以续传 你为什么返回的时候要转换为 string 呢?这样有什么好处吗? to 我用的方法和你的几乎一样,不同的是:我retrurn 的是 一个byte[] .用byte[]没有什么问题,你可能是其他地方出的问题。 从服务器上读取文件:[WebMethod] public byte[] LoadFile() { string path = @"D:\工具\File.exe"; FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); byte[] b = new byte[fs.Length]; fs.Read(b, 0, (int)fs.Length); fs.Close(); return b; }在本地保存文件:File.exe private void btnLoad_Click(object sender, EventArgs e) { SERVICE.Service myservice = new XiaZai.SERVICE.Service(); byte[] bb = myservice.LoadFile(); SaveFileDialog SaveFileDialog1 = new SaveFileDialog(); SaveFileDialog1.CreatePrompt = false; SaveFileDialog1.OverwritePrompt = true; string filetype = "rar"; SaveFileDialog1.FileName = "下载测试文件"; SaveFileDialog1.DefaultExt = filetype; SaveFileDialog1.Filter = "所有文件(*.*)|*.*"; SaveFileDialog1.InitialDirectory = "c:\\"; DialogResult result = SaveFileDialog1.ShowDialog(); System.IO.Stream fileStream; if (result == DialogResult.OK) { fileStream = SaveFileDialog1.OpenFile(); fileStream.Write(bb, 0, bb.Length); fileStream.Flush(); fileStream.Close(); MessageBox.Show("下载成功"); DialogResult DR = this.DialogResult; if (this.DialogResult == DialogResult.OK) { this.Close(); } } } byte[] b = new byte[fs.Length];天那 如果这个文件很大很大岂不是web服务里面只需要提供一个下载地址就行了客户端采用断点续传的方式一个缓存一个缓存的下载 那么在Win Form 中怎么实现断点续传呢?请指教 ◆vs2010 winform 水晶报表 如何给未绑定字段UnboundString赋值◆ 【是否可以用属性代替方法,有何利弊】 哪有CRYSTAL REPORTS 9水晶报表设计与开发大全 的电子版呀 怎么将用C#编好的程序做成安装形式的? vs 2005 能否支持C#3.0的技术 最近不知道中了什么病毒,win2003 server的任务管理器的按钕变成不可按,怎么办? 怎么样看C#的源码? 咋就不对劲呢,大家帮忙!!! WPF,为什么动画处于只读? 资源文件编辑成功后的问题! 如何将多个数据表绑定到水晶报表页面上?急....... 键盘右上角的灯亮不亮的问题啊
/// 下载升级文件
/// </summary>
/// <param name="FileName">文件名称</param>
/// <param name="ByteOffset">偏移地址</param>
/// <param name="ByteLength">下载长度</param>
/// <returns>编码字符</returns>
[WebMethod(EnableSession = true, Description = "下载升级文件")]
public string DownloadByteFile(string FileName, long ByteOffset, long ByteLength)
{
try
{
string FilePath = Server.MapPath(DownLoadPath) + "\\" + FileName;
FileStream fstream = new FileStream(FilePath, FileMode.Open);
byte[] farray = new byte[ByteLength];
fstream.Position = ByteOffset;
fstream.Read(farray, 0, (int)ByteLength);
fstream.Close(); return Convert.ToBase64String(farray);
}
catch (Exception)
{
return string.Empty;
}
}
if (fileString != string.Empty)
{
MemoryStream mstream = new MemoryStream(Convert.FromBase64String(fileString));
byte[] farray = new byte[mstream.Length];
mstream.Read(farray, 0, (int)mstream.Length);
mstream.Close(); FileStream fstream = new FileStream(dinfo.DownLoadFileName, FileMode.Append);
fstream.Write(farray, 0, farray.Length);
fstream.Flush();
fstream.Close(); dinfo.DownLength = dinfo.DownLength + farray.Length;
dinfo.SaveToXMLFile(FileName); this.progress.Value = (int)(dinfo.DownLength <= dinfo.FileLength ? dinfo.DownLength : dinfo.FileLength);
this.lblWarning.Text = "下载升级文件 - " + dinfo.DownLoadFileName + "[" + dinfo.DownLength + "/" + dinfo.FileLength + "]";
this.lblWarning.Refresh(); if (dinfo.DownLength >= dinfo.FileLength)
{
this.btnOK.Text = "完成(&F)";
break;
}
}
反正我下载300M的没问题
而且可以续传
[WebMethod]
public byte[] LoadFile()
{
string path = @"D:\工具\File.exe";
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
byte[] b = new byte[fs.Length];
fs.Read(b, 0, (int)fs.Length);
fs.Close();
return b;
}在本地保存文件:File.exe
private void btnLoad_Click(object sender, EventArgs e)
{
SERVICE.Service myservice = new XiaZai.SERVICE.Service();
byte[] bb = myservice.LoadFile();
SaveFileDialog SaveFileDialog1 = new SaveFileDialog();
SaveFileDialog1.CreatePrompt = false;
SaveFileDialog1.OverwritePrompt = true; string filetype = "rar";
SaveFileDialog1.FileName = "下载测试文件";
SaveFileDialog1.DefaultExt = filetype;
SaveFileDialog1.Filter = "所有文件(*.*)|*.*";
SaveFileDialog1.InitialDirectory = "c:\\"; DialogResult result = SaveFileDialog1.ShowDialog();
System.IO.Stream fileStream; if (result == DialogResult.OK)
{
fileStream = SaveFileDialog1.OpenFile();
fileStream.Write(bb, 0, bb.Length);
fileStream.Flush();
fileStream.Close();
MessageBox.Show("下载成功");
DialogResult DR = this.DialogResult;
if (this.DialogResult == DialogResult.OK)
{
this.Close();
}
}
}
天那 如果这个文件很大很大岂不是
web服务里面只需要提供一个下载地址就行了
客户端采用断点续传的方式一个缓存一个缓存的下载