将相同的文档上传到Dropbox .NET SDK

时间:2017-01-10 16:39:03

标签: c# dropbox

我有一个Web API函数,可以成功地将文件上传到Dropbox(使用他们的新.NET SDK),然后获取上传文件的共享链接(每个文档一次)。

private async Task<string> Upload(DropboxClient dbx, string localPath, string remotePath)
    {
        const int ChunkSize = 4096 * 1024;
        using (var fileStream = File.Open(localPath, FileMode.Open))
        {
            if (fileStream.Length <= ChunkSize)
            {
                WriteMode mode = new WriteMode();

                FileMetadata fileMetadata = await dbx.Files.UploadAsync(remotePath, body: fileStream, mode: mode.AsAdd, autorename: true);
                //set the expiry date
                var settings = new SharedLinkSettings(expires: DateTime.Today.AddDays(7));

                SharedLinkMetadata sharedLinkMetadata = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(fileMetadata.PathLower, settings);
                return sharedLinkMetadata.Url;
            }
            else
            {
                await this.ChunkUpload(dbx, remotePath, fileStream, ChunkSize);
            }
            return "error";
        }
    }

这通常可以正常工作,但是当我上传完全相同的文档(名称和内容)两次时,没有任何反应,我确实需要将这两个文件存储在我的Dropbox帐户中。

它可以是所需的文档(不仅仅是两个),我最好的方案是将第二个文档(和第三个等等)自动重命名并上传到Dropbox。

关于如何实现这一点的任何想法?

2 个答案:

答案 0 :(得分:1)

当您再次将相同的内容上传到同一路径时,Dropbox API不会产生冲突或文件的其他副本,因为没有任何更改。

如果您想在帐户中使用相同数据的其他副本,则可以在第二次调用UploadAsync时指定不同的所需路径。

或者,更有效率的是,您可以使用CopyAsync在Dropbox上制作该文件的副本。

答案 1 :(得分:1)

我发布了答案,也许它会帮助别人......我花了很长时间才弄明白。

这是检查Dropbox中是否已存在文件的代码。

如果文件存在,它会检查是否为此文件共享了一个链接,并根据它生成/检索共享链接的结果。

private async Task<string> Upload(DropboxClient dbx, string localPath, string remotePath)
    {
        const int ChunkSize = 4096 * 1024;
        using (var fileStream = File.Open(localPath, FileMode.Open))
        {
            if (fileStream.Length <= ChunkSize)
            {
                WriteMode mode = new WriteMode();
                FileMetadata fileMetadata = await dbx.Files.UploadAsync(remotePath, body: fileStream, mode: mode.AsAdd, autorename: true);
                //set the expiry date
                var existingDoc = await dbx.Files.GetMetadataAsync(remotePath);
                if (existingDoc.IsFile)
                {
                    var sharedLink = await dbx.Sharing.ListSharedLinksAsync(remotePath);
                    var settings = new ListSharedLinksArg(remotePath);
                    ListSharedLinksResult listSharedLinksResult = await dbx.Sharing.ListSharedLinksAsync(remotePath);
                    if (listSharedLinksResult.Links.Count > 0)
                    {
                        return listSharedLinksResult.Links[0].Url;
                    }
                    else
                    {
                        var sharedLinkSettings = new SharedLinkSettings(expires: DateTime.Today.AddDays(7));
                        SharedLinkMetadata sharedLinkMetadata = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(remotePath, sharedLinkSettings);
                        return sharedLinkMetadata.Url;
                    }
                }
                else
                {
                    var settings = new SharedLinkSettings(expires: DateTime.Today.AddDays(7));
                    SharedLinkMetadata sharedLinkMetadata = await dbx.Sharing.CreateSharedLinkWithSettingsAsync(fileMetadata.PathLower, settings);
                    return sharedLinkMetadata.Url;
                }
            }
            else
            {
                var sharedLink = await this.ChunkUpload(dbx, remotePath, fileStream, ChunkSize);
                return sharedLink;
            }
        }