如何将文件存储到inetpub \ wwwroot而不是UWP应用程序

时间:2017-11-15 02:47:17

标签: iis uwp storage wwwroot

我目前正在为我的学校项目开发一个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();
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

我会添加一个答案,因为这个要求有些棘手的事情。

第一个是应用can only access a few folders,inetpub不是其中之一。

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

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

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

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

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

答案 1 :(得分:0)

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

但是,如果您的应用程序符合以下条件,那么您可以使用 Brokered Windows Component (应用程序中的某个组件)将文件复制到系统中的任何位置。

  1. 您的申请是LOB申请
  2. 您只是针对桌面设备(我认为这是正确的,因为您的要求)
  3. 您正在使用侧载来安装和分发应用。
  4. 如果所有三个都是,则使用Brokered Windows Component作为UWP,使用示例在SO上显示这不是一件小事。所以值得一试,阅读并实施它。