【发布时间】:2023-07-23 20:07:02
【问题描述】:
所以我有一个简单的 ftp 传输函数,它在缓冲区上工作,将大块文件发送到我的服务器。我尝试上传一个 300MB 的文件,绝对没有问题,但是在函数完成发送 1.5GB 文件的每个字节后,函数在 writer.close() 上崩溃。
然后我收到以下错误: “底层连接已关闭:接收时发生意外错误。”
Public Function upload(ByRef fullpath As String, ByRef filename As String) As Boolean
If filename <> "" Then
Try
Dim clsRequest As FtpWebRequest = DirectCast(WebRequest.Create("ftp://myserver" & filename), FtpWebRequest)
clsRequest.Credentials = New NetworkCredential(user, password)
clsRequest.Method = WebRequestMethods.Ftp.UploadFile
clsRequest.KeepAlive = True
clsRequest.Timeout = -1
clsRequest.UsePassive = True
Dim FileInfo As FileInfo = New FileInfo(fullpath)
Dim bfile() As Byte = New Byte((FileInfo.Length) - 1) {}
clsRequest.ContentLength = FileInfo.Length
Dim bytesRead As Integer
Dim buffer(4096) As Byte
Using reader As FileStream = FileInfo.OpenRead
Using writer As Stream = clsRequest.GetRequestStream
Do
bytesRead = reader.Read(buffer, 0, buffer.Length)
If bytesRead > 0 Then
writer.Write(buffer, 0, bytesRead)
End If
Loop While bytesRead > 0
writer.Flush()
''crashes here >>>>>>>
writer.Close()
End Using
reader.Flush()
reader.Close()
End Using
Return True
Catch ex As Exception
Return False
End Try
End If
End Function
编辑:
所以我找到了一个“解决方案”,它包括在传输所有字节后对连接执行 .abort() 。它工作得很好,我没有看到任何缺点,但后来我发现这样做有点草率。有没有真正的解决方案?
【问题讨论】:
标签: vb.net streamwriter ftpwebrequest