繁体   English   中英

vb.net将网络二进制文件保存到文件

[英]vb.net saving a web binary to a file

我有一个Web 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文件。

任何帮助深表感谢。

特里

WebClient.DownloadData方法返回一个字节数组。 这样,将字节数组加载到内存流中只是再次将其读出到另一个字节数组中,然后再将其保存到文件中,这似乎很愚蠢。 通过直接从第一个字节数组到文件,可以轻松实现所有这些操作,如下所示:

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

但是,由于您可以将数据直接从网络流式传输到文件中,因此这样的效率很低:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM