Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Uwp 使用windows社区工具包OneDrive服务将文件上载到OneDrive时出现后台传输错误_Uwp_Onedrive_Windows Community Toolkit - Fatal编程技术网

Uwp 使用windows社区工具包OneDrive服务将文件上载到OneDrive时出现后台传输错误

Uwp 使用windows社区工具包OneDrive服务将文件上载到OneDrive时出现后台传输错误,uwp,onedrive,windows-community-toolkit,Uwp,Onedrive,Windows Community Toolkit,我正在尝试使用windows社区工具包OneDrive服务将文件上载到OneDrive。我可以做上传时,我的应用程序是前景。但当将其置于后台时,上载进程暂停 现在我想使用上传操作在后台传输 但我收到了400个错误请求。有什么问题吗 //后台上传 var upload=await OneDriveServiceHelper.CreateBackgroundUploadForItemAsync(oneDriveAppFolder,file,CreationCollisionOption.Repla

我正在尝试使用windows社区工具包OneDrive服务将文件上载到OneDrive。我可以做上传时,我的应用程序是前景。但当将其置于后台时,上载进程暂停

现在我想使用上传操作在后台传输

但我收到了400个错误请求。有什么问题吗

//后台上传
var upload=await OneDriveServiceHelper.CreateBackgroundUploadForItemAsync(oneDriveAppFolder,file,CreationCollisionOption.ReplaceExisting);
upload.Priority=BackgroundTransferPriority.High;
progressCallback=新进度(上载进度);
//CancellationToken=默认值(CancellationToken);
CancellationTokenSource cts=新的CancellationTokenSource();
等待upload.StartAsync().AsTask(cts.Token,progressCallback);
公共静态异步任务CreateBackgroundUploadForItemAsync(OneDriveStorageFolder destinationFolder,StorageFile sourceFile,CreationCollisionOption CreationCollisionOption,BackgroundTransferCompletionGroup completionGroup=null,CancellationToken CancellationToken=default(CancellationToken))
{
if(destinationFolder==null)
{
抛出新ArgumentNullException(nameof(destinationFolder));
}
if(sourceFile==null)
{
抛出新ArgumentNullException(nameof(sourceFile));
}
//var fileCreateNew=await destinationFolder.CreateFileAsync(desiredName,CreationCollisionOption.OpenIfExists);
返回等待任务。运行(
异步()=>
{
var requestMessage=OneDriveService.Instance.Provider.GraphProvider.Drive.Items[destinationFolder.OneDriveItem.Id].Content.Request().GetHttpRequestMessage();
等待OneDriveService.Instance.Provider.GraphProvider.AuthenticationProvider.AuthenticateRequestStatAsync(requestMessage.AsAsAsAsAsyncAction().AsTask(cancellationToken);
var uploader=completionGroup==null?new BackgroundUploader():new BackgroundUploader(completionGroup);
foreach(requestMessage.Headers中的var项)
{
SetRequestHeader(item.Key,item.Value.First());
}
SetRequestHeader(“文件名”,sourceFile.Name);
返回uploader.CreateUpload(requestMessage.RequestUri,sourceFile);
},取消令牌);
}

您能分享一个简单的示例吗?您好,@NicoZhu MSFT,我已将sln上传到github,请参阅您是否授予一个驱动器应用程序配置文件的写入权限?我在中注册了我的应用程序id,请遵循指南。当我在我的应用程序中单击“Microsoft Graph Authorition”部分时,只有“User.Read”。我无法添加其他权限,因为它没有足够的权限执行此操作。请允许管理员允许用户注册应用程序。错误消息:Wed,2018年6月27日11:01:04 GMT 4JDRK 4JDRK Df7x6Now我可以添加权限,如Files.ReadWrite、Files.ReadWrite.AppFolder、Users.Read、Users.ReadWrite。但仍然有400错误。
//Background Upload
                var upload = await OneDriveServiceHelper.CreateBackgroundUploadForItemAsync(oneDriveAppFolder, file, CreationCollisionOption.ReplaceExisting);
                upload.Priority = BackgroundTransferPriority.High;
                Progress<UploadOperation> progressCallback = new Progress<UploadOperation>(UploadProgress);
                //CancellationToken token = default(CancellationToken);
                CancellationTokenSource cts = new CancellationTokenSource();
                await upload.StartAsync().AsTask(cts.Token, progressCallback);


public static async Task<UploadOperation> CreateBackgroundUploadForItemAsync(OneDriveStorageFolder destinationFolder, StorageFile sourceFile, CreationCollisionOption creationCollisionOption, BackgroundTransferCompletionGroup completionGroup = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            if (destinationFolder == null)
            {
                throw new ArgumentNullException(nameof(destinationFolder));
            }

            if (sourceFile == null)
            {
                throw new ArgumentNullException(nameof(sourceFile));
            }

            //var fileCreateNew = await destinationFolder.CreateFileAsync(desiredName, CreationCollisionOption.OpenIfExists);
            return await Task.Run(
                async () =>
                {
                    var requestMessage = OneDriveService.Instance.Provider.GraphProvider.Drive.Items[destinationFolder.OneDriveItem.Id].Content.Request().GetHttpRequestMessage();
                    await OneDriveService.Instance.Provider.GraphProvider.AuthenticationProvider.AuthenticateRequestAsync(requestMessage).AsAsyncAction().AsTask(cancellationToken);
                    var uploader = completionGroup == null ? new BackgroundUploader() : new BackgroundUploader(completionGroup);
                    foreach (var item in requestMessage.Headers)
                    {
                        uploader.SetRequestHeader(item.Key, item.Value.First());
                    }
                    uploader.SetRequestHeader("Filename", sourceFile.Name);
                    return uploader.CreateUpload(requestMessage.RequestUri, sourceFile);
                }, cancellationToken);
        }