【问题标题】:Saving an image from the web to the Saved Pictures folder in Windows Phone 8.1 RT C#将图像从 Web 保存到 Windows Phone 8.1 RT C# 中的 Saved Pictures 文件夹
【发布时间】:2014-11-22 18:58:33
【问题描述】:

如何将图像保存到 Windows Phone 8.1 RT 中的“已保存图片”文件夹?我使用 HttpClient 从网上下载了图片。

【问题讨论】:

    标签: c# image windows-runtime windows-phone-8.1 dotnet-httpclient


    【解决方案1】:

    你只需要这个

    var url = "Some URL";
    var fileName = Path.GetFileName(url.LocalPath);
    var thumbnail = RandomAccessStreamReference.CreateFromUri(url);
    
    var remoteFile = await StorageFile.CreateStreamedFileFromUriAsync(fileName, url, thumbnail);
    await remoteFile.CopyAsync(KnownFolders.SavedPictures, fileName, NameCollisionOption.GenerateUniqueName);
    

    您需要在清单中设置图片库功能。

    【讨论】:

    • 这看起来好多了!我会在下一个版本中尝试。
    • 如何在 Javascript 中实现相同的功能??
    【解决方案2】:

    感谢 MSDN 论坛上的 mSpot Inc,我解决了这个问题。我现在使用的代码:

    StorageFolder picsFolder = KnownFolders.SavedPictures;
    StorageFile file = await picsFolder.CreateFileAsync("myImage.jpg", CreationCollisionOption.GenerateUniqueName);
    
    string url = "http://somewebsite.com/someimage.jpg";
    HttpClient client = new HttpClient();
    
    byte[] responseBytes = await client.GetByteArrayAsync(url);
    
    var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
    
    using (var outputStream = stream.GetOutputStreamAt(0))
    {
        DataWriter writer = new DataWriter(outputStream);
        writer.WriteBytes(responseBytes);
        writer.StoreAsync();
        outputStream.FlushAsync();
    }
    

    【讨论】:

    • 有没有办法将BitmapImage源转换为Btye Array,然后使用这个字节数组保存图像,而不是从url获取流。实际上我想在我的应用程序中减少互联网的使用。任何帮助将不胜感激。 :)
    【解决方案3】:

    如果您希望用户选择文件位置,您需要使用FileSavePickerpictureLibrary 作为SuggestedStartLocation

    如果你想在没有用户选择目的地的情况下保存它,你需要使用这样的东西:

    Windows.Storage.KnownFolders.picturesLibrary.createFileAsync
    

    我相信在这两种情况下,您都需要在清单中设置 Pictures Library capability

    【讨论】:

      【解决方案4】:

      目前,我使用这个原生实现:

      var url = new Uri(UriString, UriKind.Absolute);
      var fileName = Path.GetFileName(url.LocalPath);
      
      var w = WebRequest.CreateHttp(url);
      var response = await Task.Factory.FromAsync<WebResponse>(w.BeginGetResponse, w.EndGetResponse, null);
      await response.GetResponseStream().CopyToAsync(new FileStream(ApplicationData.Current.LocalFolder.Path + @"\" + fileName, FileMode.CreateNew));
      var file = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
      await file.CopyAsync(KnownFolders.SavedPictures, fileName, NameCollisionOption.FailIfExists);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多