【问题标题】:Converting binary image data received from a webservice to a byte[]将从 web 服务接收到的二进制图像数据转换为 byte[]
【发布时间】:2015-04-23 10:21:24
【问题描述】:

在 Windows 商店应用程序项目中我有这个方法

private async void getUSerImage()
    {
        try
        {

            using (var httpClient = new HttpClient { BaseAddress = Constants.baseAddress })
            {
                httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", App.Current.Resources["token"] as string);

                using (var response = await httpClient.GetAsync("user/image"))
                {
                    string responseData = await response.Content.ReadAsStringAsync();
                    byte[] bytes = Encoding.Unicode.GetBytes(responseData);

                    StorageFile sampleFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("userImage.jpg", CreationCollisionOption.ReplaceExisting);
                    await FileIO.WriteBytesAsync(sampleFile, bytes);
                    var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.Read);

                }
            }
        }
        catch (Exception e)
        {
            Debug.WriteLine(e.Message);
        }
    }

我正在尝试将接收到的二进制数据转换为字节并将其保存为文件 这就是 responseData 包含的内容,如下所示:

图像已创建但已损坏,我无法打开它我假设是这个

byte[] bytes = Encoding.Unicode.GetBytes(responseData);

没有用

webservice 文档说“主体包含二进制图像数据” 有没有更好的方法将接收到的二进制数据转换为字节并保存到文件中?

编辑:

我最终这样做了,它成功了

Stream imageStream = await response.Content.ReadAsStreamAsync();
                    byte[] bytes = new byte[imageStream.Length];

                    imageStream.Read(bytes, 0, (int)imageStream.Length);


                    StorageFile sampleFile = await ApplicationData.Current.LocalFolder.CreateFileAsync("userImage.jpg", CreationCollisionOption.ReplaceExisting);
                    await FileIO.WriteBytesAsync(sampleFile, bytes);
                    var stream = await sampleFile.OpenAsync(Windows.Storage.FileAccessMode.Read);

【问题讨论】:

标签: c# windows-runtime windows-store-apps httpclient binary-data


【解决方案1】:

您想先将数据读入流中,而不是将其作为字符串读取:

Stream imageStream= await response.Content.GetStreamAsync(theURI);
var image = System.Drawing.Image.FromStream(imageStream);
image.Save(context.Response.OutputStream, ImageFormat.Jpeg);

【讨论】:

    【解决方案2】:

    试试这个

    context.Response.ContentType = "image/jpeg";
    
    // Get the stream 
    
    var image = System.Drawing.Image.FromStream(stream);
    image.Save(context.Response.OutputStream, ImageFormat.Jpeg);
    

    如果你想显示图像而不是保存可以使用

    $('img')[0].src = 'Home/getUSerImage' // what ever image url
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 2014-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多