如图,上传大文件的时候,有时候会出现这个问题,有时候不会。
该文件是2g的文件,小文件基本不会出现这个问题。
ftp站点是iis下面建的站点,请教高手指导,谢谢啦
32 个解决方案
#1
无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。
错误信息如上
错误信息如上
#2
无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。
#3
报错的上面一句有问题,最后一个参数应该是上传文件的Length。给个邮箱,我发一份我上传图片带进度条的给你。
#4
这个应该是没问题的,如果是上传文件的length,那是一次性上传的时候那么做的。超大文件的时候,只能是分成小段,用do while 传,因为fs.read 里面的第二个参数是int类型,如果文件的length超过int的范围就不行了。
#6
你试过用你这个传过2g以上的文件么
#7
http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebresponse.statuscode.aspx
我按照msdn里面来写的,有时候就出现这个
“无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 “的错误
有时候上传虽然成功,但是2个文件的md5值不一样,很费解。求指教
我按照msdn里面来写的,有时候就出现这个
“无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 “的错误
有时候上传虽然成功,但是2个文件的md5值不一样,很费解。求指教
#8
兄弟换在么
#9
你试试把bufferLength 设置的小一点比如说2048 试试
#10
嗯,我试了一下,如果每次传输的值小的话,出现的概率变小,5次有1次出现那个bug,但是传输速度也慢了,为什么不能设大点,我发现好像值越大,出现问题的概率越大,我想每次传输的是1048576,不知道怎么弄能 解决这个问题,而且值可以设大点。不出现这个bug
#11
来个大侠帮帮忙啊
#12
没人来。。。。。。。。。。。。。。。。。。。
#13
帮顶一下,同求
#14
楼主还没解决哇,我也想知道
#15
等着看解决结果
#16
亲,感谢帮顶啊
#17
谢谢!热泪盈眶中
我单独开了个线程做这个事情也不行,给那个rstream加了个lock也不行,继续
#18
IIS接收文件么?
#19
IIS配置的最大传输大小。
#20
iis 面的ftp 服务器,可以接受文件,我这个问题是有时候出现这个情况,有时候不出
里面没有配置最大最大传输大小的地方,不是iis网站
里面没有配置最大最大传输大小的地方,不是iis网站
#21
站点属性里面是找不到的。在IIS的配置文件里面
#22
那个跟这个没关系的吧,因为我如果把bufferLength设小的话,2g的文件也可以的,只不过,偶尔出现那个bug
#23
你说的是iis站点上传的大小控制,和这个ftp站点是不一样的,ftp上传限制好像和这个不是一起的
#24
兄弟,你这样上传文件不行啊要。我看你的目的是在网站里面实现大文件上传功能。但是你在网页里面使用的FTP方式,向服务端来传文件。这个思路不行,一般都是借助于控件来实现的。比如QQ邮箱中的超大附件上传控件,115网盘中的大附件上传控件,DBank(华为网盘)中的大附件上传控件,金山网盘中的大文件上传控件都是用控件来做的。
#25
楼主是想实现这样的效果么?在Web页面中实现超大附件断点续传功能?
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
#26
不是的,不是网站里实现大文件上传,而是专门做一个winform程序,上传文件到ftp服务器的。谢谢
#27
你这个是web页面的,http上传的,不知道有没有ftp上传的,你用的是什么方法来实现的呢,是微软自带的类么。 和我的需求有所偏差
ftpwebrequest里面你说的这些功能也可以实现的,只不过现在我这个环境里出现bug,所以想请求高人指导一下,公司内部网络,用的代理,我设ftpwebrequest的代理为null啦,有时候可以成功不出现1楼的问题,有时候就出现。不知道是不是公司内部网络不稳定的原因
#28
我刚刚测试了一下,ftp配置的localhost,然后本地网络给关闭掉,虚拟机的网络也关闭掉,也是传到中途就断的,每次断的时候已传输的大小不一样
#29
试试在别的机子上行不行呢
#30
http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest.usepassive.aspx
ftp服务器不同,你将这个UsePassive属性设为false试试,默认是true,表示服务器被动模式,大部分时候这种模式是比 服务器主动模式要好,但是ftp服务器不同,防火墙不同,所以呢,你设为false试试。
ftp服务器不同,你将这个UsePassive属性设为false试试,默认是true,表示服务器被动模式,大部分时候这种模式是比 服务器主动模式要好,但是ftp服务器不同,防火墙不同,所以呢,你设为false试试。
#31
嗯,我在自己另外一台电脑上又是可以的,很奇怪
#32
爱死你了,经过测试吧,改为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");
}
#1
无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。
错误信息如上
错误信息如上
#2
无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。
#3
报错的上面一句有问题,最后一个参数应该是上传文件的Length。给个邮箱,我发一份我上传图片带进度条的给你。
#4
这个应该是没问题的,如果是上传文件的length,那是一次性上传的时候那么做的。超大文件的时候,只能是分成小段,用do while 传,因为fs.read 里面的第二个参数是int类型,如果文件的length超过int的范围就不行了。
#5
#6
你试过用你这个传过2g以上的文件么
#7
http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebresponse.statuscode.aspx
我按照msdn里面来写的,有时候就出现这个
“无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 “的错误
有时候上传虽然成功,但是2个文件的md5值不一样,很费解。求指教
我按照msdn里面来写的,有时候就出现这个
“无法将数据写入传输连接: 远程主机强迫关闭了一个现有的连接。。 “的错误
有时候上传虽然成功,但是2个文件的md5值不一样,很费解。求指教
#8
兄弟换在么
#9
你试试把bufferLength 设置的小一点比如说2048 试试
#10
嗯,我试了一下,如果每次传输的值小的话,出现的概率变小,5次有1次出现那个bug,但是传输速度也慢了,为什么不能设大点,我发现好像值越大,出现问题的概率越大,我想每次传输的是1048576,不知道怎么弄能 解决这个问题,而且值可以设大点。不出现这个bug
#11
来个大侠帮帮忙啊
#12
没人来。。。。。。。。。。。。。。。。。。。
#13
帮顶一下,同求
#14
楼主还没解决哇,我也想知道
#15
等着看解决结果
#16
亲,感谢帮顶啊
#17
谢谢!热泪盈眶中
我单独开了个线程做这个事情也不行,给那个rstream加了个lock也不行,继续
#18
IIS接收文件么?
#19
IIS配置的最大传输大小。
#20
iis 面的ftp 服务器,可以接受文件,我这个问题是有时候出现这个情况,有时候不出
里面没有配置最大最大传输大小的地方,不是iis网站
里面没有配置最大最大传输大小的地方,不是iis网站
#21
站点属性里面是找不到的。在IIS的配置文件里面
#22
那个跟这个没关系的吧,因为我如果把bufferLength设小的话,2g的文件也可以的,只不过,偶尔出现那个bug
#23
你说的是iis站点上传的大小控制,和这个ftp站点是不一样的,ftp上传限制好像和这个不是一起的
#24
兄弟,你这样上传文件不行啊要。我看你的目的是在网站里面实现大文件上传功能。但是你在网页里面使用的FTP方式,向服务端来传文件。这个思路不行,一般都是借助于控件来实现的。比如QQ邮箱中的超大附件上传控件,115网盘中的大附件上传控件,DBank(华为网盘)中的大附件上传控件,金山网盘中的大文件上传控件都是用控件来做的。
#25
楼主是想实现这样的效果么?在Web页面中实现超大附件断点续传功能?
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
文件MD5值计算进度:
文件MD5值计算完毕
服务器根据MD5检测是否存在相同文件
续传文件
从服务器加载文件列表
文件上传中
文件上传完毕
上传文件夹
#26
不是的,不是网站里实现大文件上传,而是专门做一个winform程序,上传文件到ftp服务器的。谢谢
#27
你这个是web页面的,http上传的,不知道有没有ftp上传的,你用的是什么方法来实现的呢,是微软自带的类么。 和我的需求有所偏差
ftpwebrequest里面你说的这些功能也可以实现的,只不过现在我这个环境里出现bug,所以想请求高人指导一下,公司内部网络,用的代理,我设ftpwebrequest的代理为null啦,有时候可以成功不出现1楼的问题,有时候就出现。不知道是不是公司内部网络不稳定的原因
#28
我刚刚测试了一下,ftp配置的localhost,然后本地网络给关闭掉,虚拟机的网络也关闭掉,也是传到中途就断的,每次断的时候已传输的大小不一样
#29
试试在别的机子上行不行呢
#30
http://msdn.microsoft.com/zh-cn/library/system.net.ftpwebrequest.usepassive.aspx
ftp服务器不同,你将这个UsePassive属性设为false试试,默认是true,表示服务器被动模式,大部分时候这种模式是比 服务器主动模式要好,但是ftp服务器不同,防火墙不同,所以呢,你设为false试试。
ftp服务器不同,你将这个UsePassive属性设为false试试,默认是true,表示服务器被动模式,大部分时候这种模式是比 服务器主动模式要好,但是ftp服务器不同,防火墙不同,所以呢,你设为false试试。
#31
嗯,我在自己另外一台电脑上又是可以的,很奇怪
#32
爱死你了,经过测试吧,改为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");
}