上传文件到局域网服务器的IIS虚拟目录

Forrest23 2011-10-20 04:07:38
现在我知道两种上传方法,但是这两种都没有办法加进度条,也无法获取是否上传成功

我现在用的是第一种方法,但是如果网络比较慢,文件比较大的时候会出现上传不成功的情况,而且没有异常,服务器上有此文件但是只有几KB,不知道是什么原因造成的

我本来想在第二种方法上加进度条,但是单步跟踪后发现,这种方法真正开始上传是在执行 postStream.Close()时 所以也无法加进度条

想找一种可以加进度条上传的方法 望指教

方法一


Try
Dim myWebClient As New WebClient
myWebClient.UploadFile("http://192.168.1.201/2/1.zip", "put", "E:\psp\1\1.zip")
Catch ex As Exception

End Try


方法二


Try
Dim myWebClient As New WebClient

Dim fs As FileStream = New FileStream("E:\psp\电影\rleis.zip", FileMode.Open, FileAccess.Read)
Dim br As BinaryReader = New BinaryReader(fs)
Dim uriString As Uri = New Uri("http://192.168.1.201/zdimp/rleis.zip")
Dim postArray As Byte() = br.ReadBytes(CInt(fs.Length))
Dim postStream As Stream = myWebClient.OpenWrite(uriString, "PUT")
If postStream.CanWrite Then
postStream.Write(postArray, 0, postArray.Length)
End If
postStream.Close()

Catch ex As Exception
MsgBox(ex.ToString.Trim)
End Try

...全文
345 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Forrest23 2011-10-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 net_lover 的回复:]

Upload.aspx是要加咋服务器上的。你要是演示,安装在本机就可以了。要给客户用,只要有iis运行asp.net环境就可以了
[/Quote]

明白了,不过我找到一个更简单的方法,不需要弄这个 Upload.aspx页面


Private Function uploadFile() As Boolean
Try
Me.lblInfo.Text = "正在上传文件: " & strFileName & " ,请稍后..."
Dim DownLaodDelegate As New DownLaodTextDg(AddressOf DownLoadText)
Dim uploadUrl As New System.Uri(strServerPath & strFileName)
Dim hwr As System.Net.HttpWebRequest = System.Net.WebRequest.Create(uploadUrl)
Dim fs As New System.IO.FileStream(strLocalPath, FileMode.Open, FileAccess.Read) '得到本地文件的数据流
Dim totalBytes As Long = fs.Length
Dim percent As Integer = 0
hwr.Timeout = 1000 * 5 * 60 '设置超时值30秒
hwr.Method = "PUT" '传送方式 这里一定要是PUT才行
hwr.UseDefaultCredentials = True
hwr.KeepAlive = True
hwr.ContentLength = totalBytes '设置传送的数据长度

Me.Invoke(DownLaodDelegate, totalBytes, 0, 0, 0, False)

Dim PostStream As Stream = hwr.GetRequestStream() '发送请求
Dim totalUploadByte As Long = 0
Dim by(1024) As Byte
Dim osize As Integer = fs.Read(by, 0, CInt(by.Length))
'向服务器写入文件
Do While osize > 0
totalUploadByte = osize + totalUploadByte
PostStream.Write(by, 0, osize)
osize = fs.Read(by, 0, CInt(by.Length))
percent = (totalUploadByte / totalBytes) * 100
Me.Invoke(DownLaodDelegate, totalBytes, CInt(totalUploadByte), percent, 0, False)
Loop
fs.Close()
PostStream.Close()
PostStream.Dispose()

Me.Invoke(DownLaodDelegate, totalBytes, CInt(totalUploadByte), 100, 0, True)

Dim response As System.Net.HttpWebResponse = CType(hwr.GetResponse(), System.Net.HttpWebResponse)
response.Close()
Dim strStatusCode As String = response.StatusCode.ToString.Trim.ToUpper
If strStatusCode = "CREATED" Or strStatusCode = "OK" Then
Return True
End If
Return False
Catch ex As Exception
MsgBox(ex.ToString.Trim, MsgBoxStyle.Exclamation, "系统提示")
Return False
End Try
End Function

孟子E章 2011-10-20
  • 打赏
  • 举报
回复
Upload.aspx是要加咋服务器上的。你要是演示,安装在本机就可以了。要给客户用,只要有iis运行asp.net环境就可以了
Forrest23 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 net_lover 的回复:]

使用 WebClient 异步上载文件
带进度条
[/Quote]

我之前看过您的代码 但是我没搞懂 http://www.mengxianhui.com:802/Upload.aspx 这个aspx页面要加在哪里?我理解是加在服务器上 因为要给不同的客户用 那是不是每个客户的服务器上都要加这个aspx页面?
孟子E章 2011-10-20
  • 打赏
  • 举报
回复
xiaoyu821120 2011-10-20
  • 打赏
  • 举报
回复
可以搜一下大文件上传的代码。以前用过一个,是用httpmodule传的。
Forrest23 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 bdxzq 的回复:]

用ftp控件
[/Quote]

不用FTP方法 只用Http 方式
思考 2011-10-20
  • 打赏
  • 举报
回复
用ftp控件
wjy217213 2011-10-20
  • 打赏
  • 举报
回复
友情帮顶

16,721

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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