被文件拾取后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.Task1.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.
我试图把它放在另一个任务异步,但相同的结果。
任何想法?
我们不能使用其路径访问文件,除非文件位于可访问位置,如应用程序安装文件夹,已知文件夹,如music lib,因为UWP应用程序是隔离的,并在沙盒中运行。FileOpenPicker
帮助在应用程序中让用户选择打破应用程序容器并访问文件,是的,我们可以然后访问这个文件,例如使用流,我们也可以得到这个文件的路径,但是当你想要上传这个文件时,这里的路径不能用来再次访问这个文件。要了解更多信息,您可以参考跳过路径:坚持到StorageFile.
我的建议是,在文件被选中后,访问文件流并尝试上传此文件流。