Mega Code Archive

 
Categories / C# / WPF
 

A XAML browser application (XBAP) running in partial trust can safely upload files from a client machine

<Page x:Class="SafeFileUploadPartialTrustSample.HomePage"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     Title="HomePage"   xmlns:dialogs="clr-namespace:Microsoft.Win32;assembly=PresentationFramework">     <StackPanel>     <Button Name="uploadButton" Click="uploadButton_Click" Width="100">Upload Image...</Button>     <Image Name="viewImage" Width="500" Height="300"></Image>     <Label Name="nameLabel"></Label>          </StackPanel> </Page> //File:Window.xaml.cs using System; using System.IO; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using Microsoft.Win32; namespace SafeFileUploadPartialTrustSample {     public partial class HomePage : Page, IProvideCustomContentState {         public HomePage() {             InitializeComponent();         }         void uploadButton_Click(object sender, RoutedEventArgs e) {             OpenFileDialog dlg = new OpenFileDialog();             dlg.Filter = "Image Files(*.BMP;*.JPG;*.GIF)|*.BMP;*.JPG;*.GIF|All files (*.*)|*.*";             if (dlg.ShowDialog() == true) {                 if (this.viewImage.Source != null) {                     ImageCustomContentState iccs = new ImageCustomContentState(this.viewImage.Source, (string)this.nameLabel.Content);                     this.NavigationService.AddBackEntry(iccs);                 }                 using (Stream stream = dlg.OpenFile()) {                     BitmapDecoder bitmapDecoder = BitmapDecoder.Create(stream, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);                     this.viewImage.Source = bitmapDecoder.Frames[0];                     this.nameLabel.Content = dlg.SafeFileName;                 }             }         }         public CustomContentState GetContentState() {             return new ImageCustomContentState(this.viewImage.Source, (string)this.nameLabel.Content);         }     }     [Serializable]     public class ImageCustomContentState : CustomContentState     {         ImageSource imageSource;         string filename;         public ImageCustomContentState(ImageSource imageSource, string filename)         {             this.imageSource = imageSource;             this.filename = filename;         }         public override string JournalEntryName         {             get { return this.filename; }         }         public override void Replay(NavigationService navigationService, NavigationMode mode)         {             HomePage homePage = (HomePage)navigationService.Content;             homePage.viewImage.Source = this.imageSource;             homePage.nameLabel.Content = this.filename;         }     } }