我有一个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。
有没有关于如何做到这一点的想法?
发布于 2017-01-11 19:31:35
我把答案贴出来,也许它会帮助一些人..我花了很长时间才弄明白。
这是检查文件是否已经存在于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;
}
}发布于 2017-01-11 03:08:54
当您再次将完全相同的内容上传到相同的路径时,Dropbox API不会产生冲突或文件的另一个副本,因为没有任何更改。(编辑:即使是相同的内容,也可以通过使用strictConflict=true来强制冲突,例如在UploadAsync上)。
如果您想要账户中相同数据的另一个副本,您可以在第二次调用UploadAsync时指定不同的所需路径。
或者,更有效的方法是,您可以使用CopyAsync来复制Dropbox中已有的文件。
https://stackoverflow.com/questions/41573807
复制相似问题