如何将文件存储到inetpub\wwwroot中,而不是UWP应用程序上的本地机器文件夹中



我目前正在为我的学校项目开发一个UWP应用程序,其中一个页面允许用户自拍。我按照本教程创建了该功能:CameraStarterKit

目前,我正在将拍摄的图片存储在桌面的图片文件夹中。但我项目的要求是将拍摄的照片存储在inetpub\wwwroot下一个名为"照片"的文件夹中。

我真的不明白wwwroot或IIS是什么…因此,我不知道应该如何修改代码并将其存储到文件夹中。

以下是我在本地桌面上存储的代码:

private async Task TakePhotoAsync()
{
idleTimer.Stop();
idleTimer.Start();
var stream = new InMemoryRandomAccessStream();
//MediaPlayer mediaPlayer = new MediaPlayer();
//mediaPlayer.Source = MediaSource.CreateFromUri(new Uri("ms-appx:///Assets/camera-shutter-click-03.mp3"));
//mediaPlayer.Play();
Debug.WriteLine("Taking photo...");
await _mediaCapture.CapturePhotoToStreamAsync(ImageEncodingProperties.CreateJpeg(), stream);


try
{
var file = await _captureFolder.CreateFileAsync("NYPVisitPhoto.jpg", CreationCollisionOption.GenerateUniqueName);
Debug.WriteLine("Photo taken! Saving to " + file.Path);
var photoOrientation = CameraRotationHelper.ConvertSimpleOrientationToPhotoOrientation(_rotationHelper.GetCameraCaptureOrientation());
await ReencodeAndSavePhotoAsync(stream, file, photoOrientation);
Debug.WriteLine("Photo saved!");

}
catch (Exception ex)
{
// File I/O errors are reported as exceptions
Debug.WriteLine("Exception when taking a photo: " + ex.ToString());
}

}

用于存储文件:

private static async Task ReencodeAndSavePhotoAsync(IRandomAccessStream stream, StorageFile file, PhotoOrientation photoOrientation)
{
using (var inputStream = stream)
{
var decoder = await BitmapDecoder.CreateAsync(inputStream);
using (var outputStream = await file.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateForTranscodingAsync(outputStream, decoder);
var properties = new BitmapPropertySet { { "System.Photo.Orientation", new BitmapTypedValue(photoOrientation, PropertyType.UInt16) } };
await encoder.BitmapProperties.SetPropertiesAsync(properties);
await encoder.FlushAsync();
}
}
}

我会添加一个答案,因为这个需求有一些棘手的问题。

首先,该应用程序只能访问少数文件夹,inetpub不是其中之一。

使用代理Windows运行时组件(我建议使用FullTrustProcessLauncher,它的开发和部署要简单得多)可以使UWP应用程序以与传统桌面应用程序相同的方式访问文件夹。

虽然这适用于普通文件夹,但inetpub文件夹不同,它需要管理员权限才能写入,除非您关闭UAC。

该应用程序启动的桌面组件也没有足够的权限写入该文件夹。

因此,它认为另一种方法是在IIS管理器中设置一个虚拟目录,映射到公共图片库中的文件夹,然后应用程序将图片保存到该文件夹。

从网站的角度来看,虚拟目录与inetpub下的真实文件夹相同,不同之处在于访问权限。

Kennyzx就在这里,由于权限的原因,您无法通过UWP应用程序访问inetpub文件夹。

但是,如果您的应用程序满足以下条件,则可以使用代理Windows组件(应用程序中的一个组件)将文件复制到系统中的任何位置。

  1. 您的应用程序是LOB应用程序
  2. 你只针对桌面设备(我认为这是真的,因为你的要求)
  3. 您正在使用侧加载来安装和分发应用程序

如果这三个都是"是",那么使用代理Windows组件进行UWP,这不是一件小事,可以在SO上使用示例进行展示。因此,值得一试阅读并实现它。

相关内容

最新更新