UWP 如何显示来自网络目录的图像
UWP how to show image from a network directory
我尝试了很多方法在我的 UWP 应用程序中将图像源设置为网络目录。例如我试过这个例子:
BitmapImage bitmap = new BitmapImage(new Uri(@"\venera\Mariner7_WEDNESDAY[=10=]3[=10=] Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg"));
UserImage.Source = bitmap;
和
bitmap.UriSource = new Uri(@"\venera\Mariner7_WEDNESDAY[=11=]3[=11=] Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg", UriKind.Absolute);
UserImage.Source = bitmap;
但其中 none 有效。我最终遇到以下错误 E_NETWORK_ERROR
我已经阅读了来自 Whosebug 和其他资源的许多链接,但没有任何东西对我有用。
我已经为它设置了所需的功能和声明。
我已经用 Windows.Storage.Pickers.FolderPicker
试过了,但是我找不到任何东西可以设置文件夹位置来读取文件。
我不想打开文件夹选择器,我只想直接从网络指定位置获取图像。
可能有人试图将它与这张票联系起来
但这对我的任务没有帮助。
我也试过这些例子,但仍然无法实现目标:
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
我收到 System.UnauthorizedAccessException: 'Access is denied.
错误
您不能使用任何路径。只有 KnownFolders 和本地应用程序路径。但是您可能会从任何地方获取字节数组:
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);
}
要在网络上的共享文件夹中设置.jpg文件,我们可以先获取StorageFile
,然后使用SetSource
方法将源设置为BitmapImage
。要访问共享文件夹中的文件,我们需要在应用程序清单中声明一些功能。
通用命名约定 (UNC) 是 Microsoft Windows 中常用的命名系统,用于访问共享网络文件夹。更多信息,请参考File access permissions.
这是我的 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>
设置BitmapImage的代码:
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"\venera\Mariner7_WEDNESDAY[=11=]3[=11=] 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;
}
我尝试了很多方法在我的 UWP 应用程序中将图像源设置为网络目录。例如我试过这个例子:
BitmapImage bitmap = new BitmapImage(new Uri(@"\venera\Mariner7_WEDNESDAY[=10=]3[=10=] Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg"));
UserImage.Source = bitmap;
和
bitmap.UriSource = new Uri(@"\venera\Mariner7_WEDNESDAY[=11=]3[=11=] Flat B -\APR3783216-MED-BLK TAPE-GB-Apron.jpg", UriKind.Absolute);
UserImage.Source = bitmap;
但其中 none 有效。我最终遇到以下错误 E_NETWORK_ERROR
我已经阅读了来自 Whosebug 和其他资源的许多链接,但没有任何东西对我有用。
我已经为它设置了所需的功能和声明。
我已经用 Windows.Storage.Pickers.FolderPicker
试过了,但是我找不到任何东西可以设置文件夹位置来读取文件。
我不想打开文件夹选择器,我只想直接从网络指定位置获取图像。
可能有人试图将它与这张票联系起来
我也试过这些例子,但仍然无法实现目标: 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
我收到 System.UnauthorizedAccessException: 'Access is denied.
错误
您不能使用任何路径。只有 KnownFolders 和本地应用程序路径。但是您可能会从任何地方获取字节数组:
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);
}
要在网络上的共享文件夹中设置.jpg文件,我们可以先获取StorageFile
,然后使用SetSource
方法将源设置为BitmapImage
。要访问共享文件夹中的文件,我们需要在应用程序清单中声明一些功能。
通用命名约定 (UNC) 是 Microsoft Windows 中常用的命名系统,用于访问共享网络文件夹。更多信息,请参考File access permissions.
这是我的 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>
设置BitmapImage的代码:
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(@"\venera\Mariner7_WEDNESDAY[=11=]3[=11=] 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;
}