Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

[wpdev] Storage bug in MediaLibrary.SavePicture

I’ve received many reports lately of users complaining of abnormal storage usage from one of my apps, Imageboard Browser.The application was in some cases storing hundreds of megabytes! I thought at first that it was just the "other storage” issue, but I did some further investigation just in case.

After some trial and error and a bit of luck, I’ve discovered that the bug lies in the methods MediaLibrary.SavePicture and MediaLibrary.SavePictureToCameraRoll. As their name indicate, they are used to save a picture to the phone’s picture hub, and they do their job pretty well. Except that ever time you use them, a copy of your picture is stored in the isolated storage!

To confirm this, I’ve written a small application with two buttons. It’s as simple as it can get: the “download” button downloads a picture, and saves it to the picture hub. The “storage” button displays the contents of the isolated storage:

   1: private void ButtonDownload_Click(object sender, RoutedEventArgs e)
   2: {
   3:     var webClient = new WebClient();
   5:     webClient.OpenReadCompleted += WebClient_OpenReadCompleted;
   7:     webClient.OpenReadAsync(new Uri(""));
   8: }
  10: private void WebClient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
  11: {
  12:     using (var mediaLibrary = new MediaLibrary())
  13:     {
  14:         mediaLibrary.SavePicture("1", e.Result);
  15:     }
  17:     MessageBox.Show("Done");
  18: }
  20: private void ButtonStorage_Click(object sender, RoutedEventArgs e)
  21: {
  22:     using (var isolatedStorage = IsolatedStorageFile.GetUserStoreForApplication())
  23:     {
  24:         var files = isolatedStorage.GetFileNames();
  26:         MessageBox.Show(string.Join("\r\n", files));
  27:     }
  28: }

When running the application for the first time, the “storage” button shows that the isolated storage is empty:



Then, after using the “download” button to download a picture and save it to the picture hub, the “storage” button finds one file!



Since there’s no built-in tool in Windows Phone to explore the isolated storage, it’s a bug that can be easily overlooked.

I’ve been doing a few more tests about this bug, and here are my findings so far:

- I could not reproduce the bug on Windows Phone 7, only Windows Phone 8 seems affected.

- I could reproduce the issue on various devices (Lumia 822, Lumia 920, and the emulator). So it’s unlikely that the bug is hardware-specific.

- The bug occurs only when saving JPG pictures. Nothing is stored on the isolated storage when saving a PNG picture.

- If I anticipate and create beforehand a file on the isolated storage with the same name, it will be overwritten. If I lock it by keeping the stream open, the MediaLibrary.SavePicture method throws an exception.

- The MediaLibrary.SavePicture has an overload that expect a byte array rather than a stream. It suffers from the same bug.

- The name of the file created in the isolated storage is the same name as the one provided to the MediaLibrary.SavePicture, with “.jpg” appended to the end (even if the name already contained “.jpg”), and dots ‘.’ replaced by underscores ‘_’. Knowing this, it’s possible to write code to automatically delete the file.

- On Nokia’s storage tool, those files are reported in the application’s dedicated storage. Not in the temp files or the “others” storage.

In a nutshell, if you’re saving pictures to the picture hub, make sure you’re deleting the temporary files in the isolated storage afterwards. I hope Microsoft will be able to provide a fix quickly, as it can quickly become an issue on devices with low storage.

Also, I only have been able to test on the latest version of the WP8 OS (8.0.10211.204). If you still have a device with an older version of the OS, could you please try to reproduce the bug on it? I’m eager to know if the bug was introduced on the latest version of WP8 or if it has always been standing there.

Publié dimanche 26 mai 2013 19:08 par KooKiz
Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :


Pas de commentaires
Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- SPS Paris 2015 – Back from MS Ignite par Le blog de Patrick [MVP Office 365] le 05-26-2015, 16:04

- Windows 10 IOT– exploitez vos capteurs en tout genre ! par Blog de Daniel TIZON [daniel] le 05-26-2015, 08:06

- SharePoint Saturday Paris 2015 c’est le 30 mai ! par Le blog de Patrick [MVP Office 365] le 05-25-2015, 21:07

- Configurer un écran 5 pouces 800x480 pour Raspberry Pi2 sous Windows 10 IOT par Blog de Daniel TIZON [daniel] le 05-22-2015, 07:52

- Office 365 : Sway est disponible en preview par Le petit blog de Pierre / Pierre's little blog le 05-21-2015, 22:24

- Première installation de Raspbian sur RASPBERRY Pi 2 par Blog de Daniel TIZON [daniel] le 05-14-2015, 22:17

- Mobile Day : c’est le 25 et c’est chez Microsoft! par Fathi Bellahcene le 05-13-2015, 23:48

- TFS 2013 : Migration d’une ferme TFS 2010 vers 2013 sans upgrade par Blog Technique de Romelard Fabrice le 05-01-2015, 16:28

- [ #SharePoint 2016 ] frappe à nos portes ! (1/2) par Le blog de Patrick [MVP Office 365] le 04-19-2015, 23:21

- Lync devient Skype Entreprise par Le petit blog de Pierre / Pierre's little blog le 04-18-2015, 22:47