Dropbox.Api 无法上传大文件

Posted

技术标签:

【中文标题】Dropbox.Api 无法上传大文件【英文标题】:Dropbox.Api failing to upload large files 【发布时间】:2016-11-09 08:49:53 【问题描述】:

我正在使用以下代码将文件上传到保管箱。

我正在使用 nuget 包 Dropbox.Api 并收到异常 System.Threading.Tasks.TaskCanceledException("A task was cancelled.")

从这个SO Question 看来,这是一个超时问题。

那么如何修改下面的代码来设置超时时间。

    public async Task<FileMetadata> UploadFileToDropBox(string fileToUpload, string folder)
    
        DropboxClient client = new DropboxClient(GetAccessToken());

        using (var mem = new MemoryStream(File.ReadAllBytes(fileToUpload)))
        
            string filename = Path.GetFileName(fileToUpload);

            try
            
                string megapath = GetFullFolderPath(folder);
                string megapathWithFile = Path.Combine(megapath, Path.GetFileName(Path.GetFileName(filename))).Replace("\\", "/");
                var updated = client.Files.UploadAsync(megapathWithFile, WriteMode.Overwrite.Instance, body: mem);
                await updated;
                return updated.Result;
            
            catch (Exception ex)
            
                return null;
            
        
    

【问题讨论】:

【参考方案1】:

尝试像这样创建和初始化客户端:

var config = new DropboxClientConfig();
config.HttpClient.Timeout = new TimeSpan(hr, min, sec); // choose values
var client = DropboxClient(GetAccessToken(), config);

参考:http://dropbox.github.io/dropbox-sdk-dotnet/html/M_Dropbox_Api_DropboxClient__ctor_1.htm

【讨论】:

嗨,彼得,谢谢。它的工作。我必须将以下行添加为第二行 config.HttpClient = new System.Net.Http.HttpClient();因为 HttpClient obj 为空。 Dropbox API 的任何部分是否公开了构造新 HttpClient 的工厂方法?我和@VivekDev 有同样的问题,但我不确定调用 new HttpClient() 是否缺少其他一些配置步骤,如果留下来创建对象本身,Dropbox API 可能会在内部调用这些步骤。 @Jono 无工厂方法,如果配置中不提供webClient,则默认使用github.com/dropbox/dropbox-sdk-dotnet/blob/…【参考方案2】:

另外要记住的是,根据文档,UploadAsync 不适用于大于 150MB 的文件。必须为此使用基于 UploadSessionStartAsync 的实现。我在不知不觉中犯了错误,我花了很长时间才发现问题。

【讨论】:

以上是关于Dropbox.Api 无法上传大文件的主要内容,如果未能解决你的问题,请参考以下文章

DropBox API 应用程序/八位字节流标头

通过 Dropbox API 上传的文件内容不一致

mvc 无法上传大文件 提示超过长度

无法用php上传大文件

无法将大文件上传到 Google 文档

无法使用 laravel 文件管理器上传大文件(视频)