C# 将相同的文档上载到Dropbox.NET SDK

C# 将相同的文档上载到Dropbox.NET SDK,c#,dropbox,C#,Dropbox,我有一个web API函数,它可以成功地将文件上传到Dropbox(使用新的.NET SDK),然后获得上传文件的共享链接(每个文档一次) 私有异步任务上载(DropboxClient dbx、字符串localPath、字符串remotePath) { 常量int ChunkSize=4096*1024; 使用(var fileStream=File.Open(localPath,FileMode.Open)) { 如果(fileStream.Length再次将相同的确切内容上载到同一路径时,D

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

私有异步任务上载(DropboxClient dbx、字符串localPath、字符串remotePath)
{
常量int ChunkSize=4096*1024;
使用(var fileStream=File.Open(localPath,FileMode.Open))
{

如果(fileStream.Length再次将相同的确切内容上载到同一路径时,Dropbox API不会产生冲突或文件的另一个副本,因为没有任何更改。(编辑:您可以使用
strictConflict=true
,例如,启用,强制相同内容发生冲突)

如果您希望在帐户中有相同数据的另一个副本,则可以在第二次调用时指定不同的所需路径


或者,更有效地,您可以使用创建Dropbox上已存在文件的副本。

当您再次将相同的确切内容上载到同一路径时,Dropbox API不会产生冲突或文件的其他副本,因为没有任何更改。(编辑:您甚至可以使用
strictConflict=true
,例如,on,强制相同内容发生冲突)

如果您希望在帐户中有相同数据的另一个副本,则可以在第二次调用时指定不同的所需路径


或者,更有效的是,你可以使用Dropbox制作一份已经存在的文件副本。

我发布了答案,也许会对某人有所帮助..我花了很长时间才弄明白

这是检查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;
            }
        }
私有异步任务上载(DropboxClient dbx、字符串localPath、字符串remotePath)
{
常量int ChunkSize=4096*1024;
使用(var fileStream=File.Open(localPath,FileMode.Open))
{
if(fileStream.Length 0)
{
返回listSharedLinksResult.Links[0].Url;
}
其他的
{
var sharedLinkSettings=新的sharedLinkSettings(过期:DateTime.Today.AddDays(7));
SharedLinkMetadata SharedLinkMetadata=等待dbx.Sharing.CreateSharedLinkWithSettingsAsync(远程路径,sharedLinkSettings);
返回sharedLinkMetadata.Url;
}
}
其他的
{
var settings=newsharedlinksettings(过期:DateTime.Today.AddDays(7));
SharedLinkMetadata SharedLinkMetadata=await dbx.Sharing.CreateSharedLinkWithSettingsAsync(fileMetadata.PathLower,设置);
返回sharedLinkMetadata.Url;
}
}
其他的
{
var sharedLink=wait this.ChunkUpload(dbx、remotePath、fileStream、ChunkSize);
返回共享链接;
}
}

我发布了答案,也许会对某人有所帮助..我花了很长时间才弄明白

这是检查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;
            }
        }
私有异步任务上载(DropboxClient dbx、字符串localPath、字符串remotePath)
{
常量int ChunkSize=4096*1024;
使用(var fileStream=File.Open(localPath,FileMode.Open))
{
if(fileStream.Length 0)
{
返回listSharedLinksResult.Links[0].Url;
}
其他的
{
var sharedLinkSettings=新的sharedLinkSettings(过期:DateTime.Today.AddDays(7));
SharedLinkMetadata SharedLinkMetadata=等待dbx.Sharing.CreateSharedLinkWithSettingsAsync(远程路径,sharedLinkSettings);
返回sharedLinkMetadata.Url;
}
}
其他的
{
var settings=newsharedlinksettings(过期:DateTime.Today.AddDays(7));
SharedLinkMetadata SharedLinkMetadata=await dbx.Sharing.CreateSharedLinkWithSettingsAsync(fileMetadata.PathLower,设置);
返回sharedLinkMetadata.Url;
}
}
其他的
{
var sharedLink=wait this.ChunkUpload(dbx、remotePath、fileStream、ChunkSize);
返回共享链接;
}
}

谢谢,问题是我事先不知道文档是否已经存在,所以
copyanc
方法如何帮助呢?如果说我保留了相同的代码,当我尝试获取共享链接时,我得到了一个
共享链接已存在错误
?您可以使用它来检查文件是否已经存在。如果链接已读取y存在于某个文件中,您可以使用检索该文件。您能给出一个示例吗?我没有这些示例。如果遇到任何问题,请尝试一下,并打开一个新问题。只需再问一个问题,如果共享链接已经存在,过期时间如何?如何设置现有链接,使其在7天内过期?谢谢你,问题是我事先不知道文档是否已经存在,
copySync
方法如何帮助你?如果说我保留了相同的代码,当我尝试获取共享链接时,我得到了一个
共享链接已经存在错误
?你可以使用它来检查文件是否已经存在。如果链接已经存在,则一个文件,您可以使用检索它。您能给出一个示例吗?我没有这些可用的示例。如果遇到任何问题,请尝试一下并打开一个新问题。如果共享链接