被文件拾取后UWP不能使用文件

本文关键字:文件 不能 UWP | 更新日期: 2023-09-27 18:07:31

我正在尝试上传一个文件到amazon s3,在filepicpick它。

首先,我这样做:

       var picker = new Windows.Storage.Pickers.FileOpenPicker();
       picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
       picker.SuggestedStartLocation =
            Windows.Storage.Pickers.PickerLocationId.PicturesLibrary;
       picker.FileTypeFilter.Add("*");
       Windows.Storage.StorageFile file = await picker.PickSingleFileAsync();

所以这里,file被选中并准备使用。

之后,我尝试上传它,像这样:

        if (file != null)
        {
            upload(file.Path);
        }
       ...
      public async Task<string> upload(string path)
        {
           TransferUtility utility = new TransferUtility(...);
           await utility.UploadAsync(path,key, bucket); // HERE IS THE PROBLEM
        }

所以,这是我捕获的错误:

抛出异常:'System. 'mscorlib.ni.dll中的AggregateException'系统。AggregateException:发生了一个或多个错误。——>系统。UnauthorizedAccessException: access denied.

在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)PCLStorage.WinRTFileSystem.d__0.MoveNext ()
——内部异常堆栈跟踪的结束——at System.Threading.Tasks.Task 1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task . get_result () atAmazon.S3.Transfer.TransferUtility.validate (TransferUtilityUploadRequest请求)Amazon.S3.Transfer.TransferUtility.GetUploadCommand (TransferUtilityUploadRequest请求,SemaphoreSlim asyncThrottler)Amazon.S3.Transfer.TransferUtility。UploadAsync(StringbucketName, String key, CancellationToken, CancellationToken) atTilkee.Upload.d__0.MoveNext ()——>(内部异常#0)系统。UnauthorizedAccessException: access denied.

我试图把它放在另一个任务异步,但相同的结果。

任何想法?

被文件拾取后UWP不能使用文件

我们不能使用其路径访问文件,除非文件位于可访问位置,如应用程序安装文件夹,已知文件夹,如music lib,因为UWP应用程序是隔离的,并在沙盒中运行。FileOpenPicker帮助在应用程序中让用户选择打破应用程序容器并访问文件,是的,我们可以然后访问这个文件,例如使用流,我们也可以得到这个文件的路径,但是当你想要上传这个文件时,这里的路径不能用来再次访问这个文件。要了解更多信息,您可以参考跳过路径:坚持到StorageFile.

我的建议是,在文件被选中后,访问文件流并尝试上传此文件流。