2017-08-30 3 views
0

J'ai essayé plusieurs méthodes pour définir la source de l'image sur un répertoire réseau dans mon application UWP. Par exemple, j'ai essayé cet exemple:UWP comment afficher l'image à partir d'un répertoire réseau

BitmapImage bitmap = new BitmapImage(new Uri(@"\\venera\Mariner\747\03_WEDNESDAY\003\00 Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg")); 
UserImage.Source = bitmap; 

et

bitmap.UriSource = new Uri(@"\\venera\Mariner\747\03_WEDNESDAY\003\00 Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg", UriKind.Absolute); 
UserImage.Source = bitmap; 

Mais aucun d'entre eux fonctionne. J'ai fini avec l'erreur suivante E_NETWORK_ERROR J'ai lu beaucoup de liens de stackoverflow et d'autre ressource mais il n'y a aucune chose qui fonctionne pour moi.

J'ai défini les capacités et les déclarations requises pour cela.

Je l'ai essayé avec Windows.Storage.Pickers.FolderPicker mais je n'ai rien trouvé où je puisse définir l'emplacement du dossier où lire les fichiers. Je ne veux pas ouvrir le sélecteur de dossier, je veux juste obtenir des images directement à partir d'un emplacement spécifié du réseau.

Peut-être que vous essayez de le relier avec ce billet How to display an image from a network folder or local drive in a Windows Universal App mais cela ne m'aide pas dans ma tâche.

J'ai aussi essayé ces exemples pour moi, mais ne pouvait toujours pas atteindre l'objectif: https://docs.microsoft.com/en-us/windows/uwp/files/quickstart-managing-folders-in-the-music-pictures-and-videos-libraries

https://docs.microsoft.com/en-us/uwp/api/windows.ui.xaml.controls.image

Je reçois System.UnauthorizedAccessException: 'Access is denied. Erreur

+0

J'ai eu une fois un problème similaire. Ma solution était que Visual Studio s'exécute en tant qu'administrateur local. Dans mon cas, l'administrateur local n'a pas l'autorisation de lire à partir d'un dossier réseau – Noren

+0

@Noren J'ai mis les permissions à tout le monde pour accéder à ces fichiers –

+0

Je parie que cela fonctionne si vous le compilez et l'ouvrez dans Explorer avec votre compte. Il ne suffit pas de modifier l'autorisation sur le système de fichiers. – Noren

Répondre

3

Pour définir un fichier .jpg dans le dossier partagé sur le réseau, nous pouvons obtenir le StorageFile, puis utilisez la méthode SetSource pour définir la source au BitmapImage. Pour accéder aux fichiers du dossier partagé, nous devons déclarer certaines fonctionnalités dans le manifeste de l'application.

enter image description here

Universal Naming Convention (UNC) est le système de nommage couramment utilisé dans Microsoft Windows pour accéder à des dossiers réseau partagés. Pour plus d'informations, veuillez contacter .

Ceci est mon Package.appxmanifest:

<Applications> 
    <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="UWP_how_to_show_image_from_a_network.App"> 
    <uap:VisualElements DisplayName="UWP how to show image from a network" Square150x150Logo="Assets\Square150x150Logo.png" Square44x44Logo="Assets\Square44x44Logo.png" Description="UWP how to show image from a network" BackgroundColor="transparent"> 
     <uap:DefaultTile Wide310x150Logo="Assets\Wide310x150Logo.png"> 
     </uap:DefaultTile> 
     <uap:SplashScreen Image="Assets\SplashScreen.png" /> 
     </uap:VisualElements> 
    <Extensions> 
     <uap:Extension Category="windows.fileTypeAssociation"> 
     <uap:FileTypeAssociation Name="mypictest"> 
      <uap:DisplayName>MyPicTest</uap:DisplayName> 
      <uap:SupportedFileTypes> 
      <uap:FileType>.jpg</uap:FileType> 
      </uap:SupportedFileTypes> 
     </uap:FileTypeAssociation> 
     </uap:Extension> 
    </Extensions> 
    </Application> 
</Applications> 
<Capabilities> 
    <Capability Name="internetClient" /> 
    <Capability Name="privateNetworkClientServer" /> 
    <Capability Name="internetClientServer" /> 
    <uap:Capability Name="enterpriseAuthentication" /> 
</Capabilities> 

Le code de mise BitmapImage:

StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"\\venera\Mariner\747\03_WEDNESDAY\003\00 Flat B -"); 
    StorageFile file = await folder.GetFileAsync("APR3783216-MED-BLK TAPE-GB-Apron.jpg"); 
    using (var stream = await file.OpenAsync(Windows.Storage.FileAccessMode.Read)){ 
    BitmapImage bitmap = new BitmapImage(); 
    bitmap.SetSource(stream); 
    UserImage.Source = bitmap; 
} 
2

Vous ne pouvez utiliser aucun chemin. Seuls KnownFolders et le chemin de l'application locale. Mais vous pouvez obtenir tableau d'octets où que vous soyez:

  var file = File.ReadAllBytes(_path); 

      var bitmap = new BitmapImage(); 

      using (InMemoryRandomAccessStream stream = new InMemoryRandomAccessStream()) 
      { 
       await stream.WriteAsync(file.AsBuffer()); 
       stream.Seek(0); 
       await bitmap.SetSourceAsync(stream); 
      }