【问题标题】:REST WebService: how to get zip file from web service to a clientREST WebService:如何从 Web 服务获取 zip 文件到客户端
【发布时间】:2014-05-28 08:14:32
【问题描述】:

我正在尝试创建一个函数来下载一个 zip 文件,该文件可从一个调用 Web 服务的客户端(均用 VB.Net 编写)从 REST WebService 获得。 WebService端我有如下代码:

Public Function DownloadZipFile(filename As String) As Stream Implements ILiveUpdateWS.DownloadZipFile
    WebOperationContext.Current.OutgoingResponse.ContentType = "application/txt"
    Dim f As New FileStream(DESTINATION_PATH_ZIP_FILE + "Upgrade_Package.zip",FileMode.Open)
    Dim length As Integer = CType(f.Length, Integer)
    WebOperationContext.Current.OutgoingResponse.ContentLength = length
    Dim buffer As Byte() = New Byte(length) {}
    Dim sum As Integer = 0
    Dim count As Integer
    While ((count = f.Read(buffer, sum, length - sum)) > 0)
        sum += count
    End While
    f.Close()
    Dim mimeType = ""
    WebOperationContext.Current.OutgoingResponse.ContentType = mimeType
    Return New MemoryStream(buffer)
End Function

客户端我有以下代码:

sUri = "http://localhost:35299/LiveUpdateWS/Download?" & "piv"
....
Dim req As HttpWebRequest = WebRequest.Create(sUri.ToString())
req.Method = "GET"
req.KeepAlive = False

Dim response As HttpWebResponse = req.GetResponse()
Dim resp As Net.HttpWebResponse = DirectCast(req.GetResponse(), Net.HttpWebResponse)
Dim stIn As IO.StreamReader = New IO.StreamReader(response.GetResponseStream())

响应有 ContentLenght = 242699,所以似乎接收到流,但 StIn 似乎是空的。解决问题的最佳方案是什么?

【问题讨论】:

    标签: vb.net web-services rest


    【解决方案1】:

    我认为您忘记从 StreamReader 读取文件。

            Dim inSaveFile As String = "C:\stream\test.doc"
    
            If Dir(inSaveFile) <> vbNullString Then
                Kill(inSaveFile)
            End If
    
            Dim swFile As System.IO.StreamWriter
    
            Dim fs As System.IO.FileStream = System.IO.File.Open(inSaveFile, System.IO.FileMode.CreateNew, System.IO.FileAccess.Write)
    
            swFile = New System.IO.StreamWriter(fs, System.Text.Encoding.Default)
    
            Dim response1 As System.Net.HttpWebResponse = req.GetResponse()
    
            Dim resp As Net.HttpWebResponse = DirectCast(req.GetResponse(), Net.HttpWebResponse)
    
            Dim stIn As IO.StreamReader = New IO.StreamReader(response1.GetResponseStream(), encoding:=System.Text.Encoding.Default)
    
            swFile.WriteLine(stIn.ReadToEnd)
    
            swFile.Close()
    
            fs.Close()
    

    【讨论】:

      猜你喜欢
      • 2021-07-22
      • 2011-05-31
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多