【问题标题】:vb.net saving a web binary to a filevb.net 将 Web 二进制文件保存到文件
【发布时间】:2014-02-05 23:04:34
【问题描述】:

我有一个网络 REST 服务,我试图从中提取图像(或 wav 文件)。 我可以通过内存流获取图像(jpg)并将其显示到图片框,然后将图片框保存到文件中。 我想要做的是消除使用图片框的中间步骤并将内存流直接保存到文件中。但是,生成的文件似乎不是 jpg 文件。 打开时会引发文件损坏错误。

我的代码如下:

        Dim msgURI As String
        msgURI = "http://192.168.0.1/attachment/12345/0"

        Dim Pic As New PictureBox()

        Dim web_client As New WebClient()
        web_client.Credentials = New NetworkCredential("XX", "XX")
        Dim image_stream As New MemoryStream(web_client.DownloadData(msgURI))
        Pic.Image = Image.FromStream(image_stream)


        Dim bm As Bitmap = Pic.Image
        Dim filename As String = "c:\temp\test.jpg"
        bm.Save(filename, Imaging.ImageFormat.Jpeg)

而且效果很好。

但是当我使用以下绕过位图和图片框时:

        Using file As New FileStream(filename, FileMode.Create, System.IO.FileAccess.Write)
            Dim bytes As Byte() = New Byte(image_stream.Length - 1) {}
            image_stream.Read(bytes, 0, CInt(image_stream.Length))
            file.Write(bytes, 0, bytes.Length)
            image_stream.Close()
        End Using

我得到一个损坏的 jpg 文件。

非常感谢任何帮助。

特里

【问题讨论】:

    标签: vb.net rest memorystream


    【解决方案1】:

    WebClient.DownloadData 方法返回一个字节数组。因此,将字节数组加载到内存流中只是为了将其再次读取到另一个字节数组中,然后将其保存到文件中,这似乎非常愚蠢。所有这些都可以通过直接从第一个字节数组到文件来轻松完成,如下所示:

    File.WriteAllBytes("c:\temp\test.jpg", web_client.DownloadData(msgURI))
    

    但是,即使这样也是低效的,因为您可以将数据直接从网络流式传输到文件中,如下所示:

    web_client.DownloadFile(msgURI, "c:\temp\test.jpg")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 2015-11-24
      • 2012-11-27
      • 2016-02-21
      • 2020-12-29
      • 2012-05-18
      相关资源
      最近更新 更多