当前位置:编程学习 > C#/ASP.NET >>

新人求助Web Services下载文件的问题...

*********Web Services中的下载方法*********
[WebMethod(EnableSession=true)]
public byte[] Download(string FileName, int size, long offset) 
{
string tempFile = DownloadPath + "/"+ FileName;
bool IsFileExist = File.Exists(FileName);
if((offset < 0) && (!IsFileExist))
{
CustomSoapException("Cannot Find Temp File", FileName);
}

byte[] buffer = new byte[size]; 
try
{
System.IO.FileStream FileStream = new System.IO.FileStream(tempFile, FileMode.Open, FileAccess.ReadWrite, FileShare.Read);
FileStream.Seek(offset, System.IO.SeekOrigin.Begin);
int bytesRead = FileStream.Read(buffer, 0, size);
FileStream.Flush();
FileStream.Close();

if(bytesRead != buffer.Length)
{
byte[] TrimmedBuffer = new byte[bytesRead];
size = bytesRead;
Array.Copy(buffer, TrimmedBuffer, bytesRead);
buffer = TrimmedBuffer;
}
if(buffer.Length == 0)
return null;
}
catch (Exception ex)
{
CustomSoapException("Read File Error", FileName);
}
return buffer;
}

**********在winform中碉用*********
1.这个方法在winform的cs文件中
public void downloadProgress()
{
this.Text = Title;
PercentLabel.Text = "0 %";
TransInfo.Text = Title + " ... ";

ChuckLabel.Text = "Chuck Size: " + ChuckSize.ToString() + " KB";
if(!MD5Verify)
{
MD5CheckLabel.Text = "MD5 Check: No";
}
// FileInfo fi = new FileInfo(FileName);
// StreamSize = fi.Length;
transfer = new TransferLib.DownloadTransfer();
//Todo: 
transfer.TransServer = "172.16.115.161";
transfer.eventByteTransferred += new EventHandler(OnByteTransferred);
transfer.eventStateChanged += new EventHandler(OnStateChanged);
//Generate file
//BitConverter.GetBytes 
//upload file
try
{

transfer.TransStream = new FileStream(FileName, FileMode.Open,FileAccess.Write);
************这个地方有问题,我现在是下载,那原来上传的时候这里是FileAccess.Read那现在这里应该是怎么样的啊???************
}
catch (System.Exception ex)
{
MessageBox.Show("Show"+ ex);
}
transfer.StartTransferAync(MainForm.MakeSendFileName("D0001", "I0001", 10));
//transfer.StartTransferAync(this.downlaodFileName);//download时的文件名
}
*************这个是写在类库里面的
2. public void OnTransfer(string ServerFileName)
{
System.Threading.Monitor.TryEnter(this);
int reTry = 1;
try
{
TransStartTime = System.DateTime.Now;
do 
{
if(reTry > this.TransRetryTime) break;

LogEx.Instance().AsynWriteLog("Start transfer file:" + ServerFileName + "(" + reTry.ToString() + ") times.", "Info");
OnTransfer(ServerFileName, TransStream, TransBytes);
reTry ++;
} while (this.TransStatus == TransferStatus.Failed);
}
catch (System.Exception e)
{
this.LastError = e;
LogEx.Instance().AsynWriteLog(e.ToString(), "Error");
}
System.Threading.Monitor.Exit(this);
}
***********OnTransfer有个子类,这里写的是下载的方法(DownloadTransfer.cs)在另一个里面写的子类是上传
public override void OnTransfer(string ServerFileName, System.IO.Stream transStream, long offset)
{
int ChuckSize = this.TransChuckSize;
byte[] buffer = new byte[ChuckSize];

while(buffer.Length == ChuckSize)
{
buffer = TransService.Download(ServerFileName, ChuckSize, offset);

if(buffer == null)
break;

transStream.Seek(offset, System.IO.SeekOrigin.Begin);
transStream.Write(buffer, (int)offset, buffer.Length);
offset += ChuckSize;
}
}


说实话,小弟对这个winform调用Web Services下载的方式一直不是很明白,这个程序的代码里面的上传是做好了的,我做下载想是把原来的读写方式反过来,但是我觉得不管是在客户机还是服务器不都是先读文件转字节流再写吗?那位大哥会的指点哈,小弟啊~!能qq交流最好,现在晚上不下在线等啊~~会的指点哈~!!!谢谢了~~!! --------------------编程问答-------------------- 太长了,晕,帮顶 --------------------编程问答-------------------- up --------------------编程问答-------------------- 通过Web Services上传和下载文件
http://dotnet.aspx.cc/article/6381bd5f-51f3-4339-4239-1328564a1b2a/read.aspx --------------------编程问答-------------------- 上传:客户端读本地文件,传送文件流(可以使用DATASET传送,这个简单),服务端接收后,使用写入文件的方法,把文件写到服务端(要有写权限)
下载:服务端根据客户端提供的相关信息将报务端文件读取到DATAset,并传送到客户端,客户端把DATAset内的内容(字节数组,二进制类型,可以是任何文件)写入本地
一般来说:看懂上传就会下载了(不过对于超过设定的大文件,需要判断后进行文件分割,在合并) --------------------编程问答-------------------- 通过Web Services上传和下载文件
http://dotnet.aspx.cc/article/6381bd5f-51f3-4339-4239-1328564a1b2a/read.aspx

通过二进制文件流的方法好像不是最好的方法? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 楼主搞混了

上载是  客户端 读取, 服务器写入
下载是  服务器读取 , 客户端写入

这么是反的
但在代码上,可能基本相同
而不是,下载的代码就是反着写 --------------------编程问答-------------------- 我这两天也写了个这样的东西,测试了一下小文件可以上传下载。而且我是用DELPHI调的C#的WEBSERVICES
补充:.NET技术 ,  Web Services
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,