2017-08-30 2 views
0

Ich habe viele Möglichkeiten ausprobiert, um die Bildquelle in ein Netzwerkverzeichnis in meiner UWP-Anwendung zu setzen. Zum Beispiel habe ich dieses Beispiel versucht:UWP Wie zeige ich ein Bild aus einem Netzwerkverzeichnis an?

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; 

und

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; 

Aber keiner von ihnen arbeitet. Ich endete mit dem folgenden Fehler E_NETWORK_ERROR Ich habe viele Links von stackoverflow und von anderen Ressourcen gelesen, aber es gibt nichts, was für mich funktioniert.

Ich habe die erforderlichen Funktionen und Deklarationen dafür festgelegt.

Ich habe es mit Windows.Storage.Pickers.FolderPicker versucht, aber ich konnte nichts finden, wo ich den Speicherort des Ordners festlegen kann, wo Dateien zu lesen sind. Ich möchte Ordner-Picker nicht öffnen, ich möchte nur Bilder direkt von einem angegebenen Speicherort des Netzwerks erhalten.

Vielleicht einige Sie versuchen, es mit diesem Ticket How to display an image from a network folder or local drive in a Windows Universal App beziehen, aber das hilft mir nicht bei meiner Aufgabe.

Ich habe auch diese Beispiele für mich versucht, aber noch nicht das Ziel erreichen könnte: 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

I System.UnauthorizedAccessException: 'Access is denied. Fehler

+0

Ich hatte mal ein ähnliches Problem. Meine Lösung war, dass Visual Studio als lokaler Administrator ausgeführt wurde. In meinem Fall hat der lokale Admin keine Berechtigung, von einem Netzwerkordner zu lesen. – Noren

+0

@Noren Ich habe Berechtigungen für alle Benutzer eingerichtet, um auf diese Dateien zuzugreifen –

+0

Ich wette, dass es funktioniert, wenn Sie es kompilieren und im Explorer mit Ihrem Konto öffnen. Es reicht nicht aus, die Berechtigung für das Dateisystem zu ändern. – Noren

Antwort

3

Um eine JPG-Datei in freigegebenen Ordnern im Netzwerk zu installieren, können wir die StorageFile zuerst und dann verwenden, um die SetSource Methode, um die Quelle auf die BitmapImage einzustellen. Um auf Dateien im freigegebenen Ordner zugreifen zu können, müssen einige Funktionen im App-Manifest deklariert werden.

enter image description here

Universal Naming Convention (UNC) ist das Benennungssystem häufig in Microsoft Windows verwendete Ordner für den Zugriff auf gemeinsam genutzte Netzwerk. Weitere Informationen finden Sie unter .

Das ist mein 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> 

Der Code der Einstellung Bitmap:

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

Sie können keinen Pfad verwenden bin immer. Nur KnownFolders und lokaler App-Pfad. Aber Sie können von überall Byte-Array erhalten:

  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); 
      } 
Verwandte Themen