请问大家关于c#上传文件到webdav的问题,摆脱大家救救我

etracer 2012-01-19 11:34:36

请问大家关于c#上传文件到webdav的问题,我最多怎么只能上传2个呢?多于2个就说超时了?怎么办?摆脱大家救救我

private void uploadfn(String loopnum)
{


string uploadtmp = urlbox.Text;
string tmpstr = uploadtmp + loopnum+uploadfile;

writelog("アップロード:開始,件数:" + loopnum + "件," + loopnum + uploadfile);

// HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://192.168.0.19/webdav/365.pdf");
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(tmpstr);

req.KeepAlive = false;//---------------------wo jia de


req.Credentials = new NetworkCredential(username.Text, passwd.Text);//用户名,密码 //CredentialCache.DefaultCredentials使用默认的认证


req.PreAuthenticate = true;
req.Method = "PUT";


req.AllowWriteStreamBuffering = true;

// Retrieve request stream
Stream reqStream = req.GetRequestStream();

// Open the local file
//FileStream rdr = new FileStream("C://test/365.pdf", FileMode.Open);
FileStream rdr = new FileStream(localpathfile, FileMode.Open);

// Allocate byte buffer to hold file contents
int bufferLength = 4096;

byte[] inData = new byte[bufferLength];

// loop through the local file reading each data block
// and writing to the request stream buffer
int bytesRead = rdr.Read(inData, 0, inData.Length);


//------------詳しくpress---------------
long fileLength = rdr.Length;

string strBoundary = "----------" + DateTime.Now.Ticks.ToString("x");
byte[] boundaryBytes = Encoding.ASCII.GetBytes("/r/n--" + strBoundary + "/r/n");
//请求头部信息
StringBuilder sb = new StringBuilder();

string strPostHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(strPostHeader);
long length = rdr.Length + postHeaderBytes.Length + boundaryBytes.Length;

System.IO.FileInfo f = new FileInfo(localpathfile);
// MessageBox.Show(f.Length.ToString());
long MaxValue = f.Length;
long offset = 0;
//开始上传时间
DateTime startTime = DateTime.Now;

progressDetail.Maximum = int.MaxValue;
progressDetail.Minimum = 0;
progressDetail.Value = 0;
//---------------------------

while (bytesRead > 0)
{

//------------詳しくpress---------------

offset += bytesRead;
progressDetail.Value = (int)(offset * (int.MaxValue / length));
TimeSpan span = DateTime.Now - startTime;
double second = span.TotalSeconds;
lblTime.Text = "かかる時間:" + second.ToString("F2") + "秒";
if (second > 0.001)
{
lblSpeed.Text = " 平均速度:" + (offset / 1024 / second).ToString("0.00") + "KB/秒";
}
else
{
lblSpeed.Text = "接続中...";
}
lblState.Text = "アップロード:" + (offset * 100.0 / length).ToString("F2") + "%";
lblSize.Text = (offset / 1048576.0).ToString("F2") + "M/" + (fileLength / 1048576.0).ToString("F2") + "M";

//---------------------------
reqStream.Write(inData, 0, bytesRead);
bytesRead = rdr.Read(inData, 0, inData.Length);
}

rdr.Close();
reqStream.Close();
req.GetResponse();



writelog("アップロード:完了,件数:" + loopnum + "件" + loopnum + uploadfile);
...全文
350 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
EnForGrass 2012-01-19
  • 打赏
  • 举报
回复
恭喜LZ,自己解决。加油
etracer 2012-01-19
  • 打赏
  • 举报
回复
搞定了,为什么每次我给100分,提问题,都是自己搞定

加 resp.Close(); 就好了
etracer 2012-01-19
  • 打赏
  • 举报
回复
不是文件大小的问题,我试过大文件500M没问题,可以传送,小文件的2个以上也不行
NdscFaineant 2012-01-19
  • 打赏
  • 举报
回复
可能是文件太大,超时时间req.Timeout、req.ReadWriteTimeout调大一点
熙风 2012-01-19
  • 打赏
  • 举报
回复
么有搞过。。。
熙风 2012-01-19
  • 打赏
  • 举报
回复


接分。。。

111,111

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧