急,在线等,高手指导一下,FtpWebRequest 上传大文件出问题 如图,上传大文件的时候,有时候会出现这个问题,有时候不会。该文件是2g的文件,小文件基本不会出现这个问题。ftp站点是iis下面建的站点,请教高手指导,谢谢啦 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 报错的上面一句有问题,最后一个参数应该是上传文件的Length。给个邮箱,我发一份我上传图片带进度条的给你。 这个应该是没问题的,如果是上传文件的length,那是一次性上传的时候那么做的。超大文件的时候,只能是分成小段,用do while 传,因为fs.read 里面的第二个参数是int类型,如果文件的length超过int的范围就不行了。 下载地址:http://download.csdn.net/detail/wellbeingzhang/4203203 http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebresponse.statuscode.aspx我按照msdn里面来写的,有时候就出现这个“无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 “的错误有时候上传虽然成功,但是2个文件的md5值不一样,很费解。求指教 你试试把bufferLength 设置的小一点比如说2048 试试 嗯,我试了一下,如果每次传输的值小的话,出现的概率变小,5次有1次出现那个bug,但是传输速度也慢了,为什么不能设大点,我发现好像值越大,出现问题的概率越大,我想每次传输的是1048576,不知道怎么弄能 解决这个问题,而且值可以设大点。不出现这个bug 谢谢!热泪盈眶中我单独开了个线程做这个事情也不行,给那个rstream加了个lock也不行,继续 iis 面的ftp 服务器,可以接受文件,我这个问题是有时候出现这个情况,有时候不出里面没有配置最大最大传输大小的地方,不是iis网站 站点属性里面是找不到的。在IIS的配置文件里面 那个跟这个没关系的吧,因为我如果把bufferLength设小的话,2g的文件也可以的,只不过,偶尔出现那个bug 你说的是iis站点上传的大小控制,和这个ftp站点是不一样的,ftp上传限制好像和这个不是一起的 兄弟,你这样上传文件不行啊要。我看你的目的是在网站里面实现大文件上传功能。但是你在网页里面使用的FTP方式,向服务端来传文件。这个思路不行,一般都是借助于控件来实现的。比如QQ邮箱中的超大附件上传控件,115网盘中的大附件上传控件,DBank(华为网盘)中的大附件上传控件,金山网盘中的大文件上传控件都是用控件来做的。 楼主是想实现这样的效果么?在Web页面中实现超大附件断点续传功能?文件MD5值计算进度:文件MD5值计算完毕服务器根据MD5检测是否存在相同文件续传文件从服务器加载文件列表文件上传中文件上传完毕上传文件夹 不是的,不是网站里实现大文件上传,而是专门做一个winform程序,上传文件到ftp服务器的。谢谢 你这个是web页面的,http上传的,不知道有没有ftp上传的,你用的是什么方法来实现的呢,是微软自带的类么。 和我的需求有所偏差ftpwebrequest里面你说的这些功能也可以实现的,只不过现在我这个环境里出现bug,所以想请求高人指导一下,公司内部网络,用的代理,我设ftpwebrequest的代理为null啦,有时候可以成功不出现1楼的问题,有时候就出现。不知道是不是公司内部网络不稳定的原因 我刚刚测试了一下,ftp配置的localhost,然后本地网络给关闭掉,虚拟机的网络也关闭掉,也是传到中途就断的,每次断的时候已传输的大小不一样 http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest.usepassive.aspxftp服务器不同,你将这个UsePassive属性设为false试试,默认是true,表示服务器被动模式,大部分时候这种模式是比 服务器主动模式要好,但是ftp服务器不同,防火墙不同,所以呢,你设为false试试。 爱死你了,经过测试吧,改为false后,在我这台机子上确实没问题了,而且我那个bufferLength 改为10m,都没问题啊测试代码如下: FtpWebRequest myRequest = null; Stream rStream = null;//ftp请求流 FileStream fs = null; private void button1_Click(object sender, EventArgs e) { myRequest = (FtpWebRequest)WebRequest.Create(textBox2.Text);//创建ftp请求对象 if (networkCredential == null) { networkCredential = new NetworkCredential("test123", "123456"); } myRequest.Credentials = networkCredential;//设置ftp通讯凭证 myRequest.KeepAlive = true; myRequest.ReadWriteTimeout = System.Threading.Timeout.Infinite; myRequest.Method = WebRequestMethods.Ftp.UploadFile; myRequest.Timeout = System.Threading.Timeout.Infinite; myRequest.Proxy = null; myRequest.UsePassive = false; rStream = myRequest.GetRequestStream();//创建ftp请求流 fs = File.OpenRead(textBox1.Text);//io流 const int bufferLength = 10485760;//1048576 byte[] myBuffer = new byte[bufferLength]; int iFlag = 0; long count = 0; do { iFlag = fs.Read(myBuffer, 0, bufferLength); rStream.Write(myBuffer, 0, iFlag); count += iFlag; } while (iFlag!=0); fs.Close();//文件流 rStream.Close(); FtpWebResponse myResponse = (FtpWebResponse)myRequest.GetResponse(); myResponse.Close(); MessageBox.Show("yes"); } webclient问题 如何遍历一个datatable,然后手动将修改过的记录中相关字段,更新到后数据库表? dataset和数据库更新的问题 用Vs.Net 2005创建服务失败. 请问各位大侠,怎么读取Data Access Application Block中的连接字符串. 在winform中如何像webform一样展示商品 请教一个DATASET的问题? 求C#中base64解码 datagradeview的使用 Winform 和COM 接口的线程问题 GridView绑定List有数据但不显示。 GridView行颜色
这个应该是没问题的,如果是上传文件的length,那是一次性上传的时候那么做的。超大文件的时候,只能是分成小段,用do while 传,因为fs.read 里面的第二个参数是int类型,如果文件的length超过int的范围就不行了。
我按照msdn里面来写的,有时候就出现这个“无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 “的错误有时候上传虽然成功,但是2个文件的md5值不一样,很费解。求指教
里面没有配置最大最大传输大小的地方,不是iis网站
那个跟这个没关系的吧,因为我如果把bufferLength设小的话,2g的文件也可以的,只不过,偶尔出现那个bug
你说的是iis站点上传的大小控制,和这个ftp站点是不一样的,ftp上传限制好像和这个不是一起的
文件MD5值计算进度:文件MD5值计算完毕服务器根据MD5检测是否存在相同文件续传文件从服务器加载文件列表文件上传中文件上传完毕上传文件夹
你这个是web页面的,http上传的,不知道有没有ftp上传的,你用的是什么方法来实现的呢,是微软自带的类么。 和我的需求有所偏差ftpwebrequest里面你说的这些功能也可以实现的,只不过现在我这个环境里出现bug,所以想请求高人指导一下,公司内部网络,用的代理,我设ftpwebrequest的代理为null啦,有时候可以成功不出现1楼的问题,有时候就出现。不知道是不是公司内部网络不稳定的原因
爱死你了,经过测试吧,改为false后,在我这台机子上确实没问题了,而且我那个bufferLength 改为10m,都没问题啊测试代码如下:
FtpWebRequest myRequest = null;
Stream rStream = null;//ftp请求流
FileStream fs = null;
private void button1_Click(object sender, EventArgs e)
{
myRequest = (FtpWebRequest)WebRequest.Create(textBox2.Text);//创建ftp请求对象
if (networkCredential == null)
{
networkCredential = new NetworkCredential("test123", "123456");
}
myRequest.Credentials = networkCredential;//设置ftp通讯凭证
myRequest.KeepAlive = true;
myRequest.ReadWriteTimeout = System.Threading.Timeout.Infinite;
myRequest.Method = WebRequestMethods.Ftp.UploadFile;
myRequest.Timeout = System.Threading.Timeout.Infinite;
myRequest.Proxy = null;
myRequest.UsePassive = false;
rStream = myRequest.GetRequestStream();//创建ftp请求流
fs = File.OpenRead(textBox1.Text);//io流
const int bufferLength = 10485760;//1048576
byte[] myBuffer = new byte[bufferLength];
int iFlag = 0;
long count = 0;
do
{
iFlag = fs.Read(myBuffer, 0, bufferLength);
rStream.Write(myBuffer, 0, iFlag);
count += iFlag;
} while (iFlag!=0);
fs.Close();//文件流
rStream.Close(); FtpWebResponse myResponse = (FtpWebResponse)myRequest.GetResponse();
myResponse.Close(); MessageBox.Show("yes");
}