/// <summary> /// Gets the folder shared link which can be used, for example, /// to download folder as .zip archive. /// </summary> /// <param name="svcUri">Dropbox folder URI</param> /// <returns>Folder shared link</returns> public async Task <string> GetFolderSharedLink(string svcUri) { try { dropboxApi.Sharing.ListSharedLinksResult result = null; using (var client = new dropboxApi.DropboxClient(AccessToken)) { result = await client.Sharing.ListSharedLinksAsync(svcUri, directOnly : true); if (result.Links.Count == 0) { var sharedLinkMeta = await client.Sharing.CreateSharedLinkWithSettingsAsync(svcUri); return(sharedLinkMeta.Url); } } return(result.Links[0].Url); } catch (Exception) { return(null); } }
/// <summary> /// Retrieves all the files that are within Dropbox folder by given URI. /// </summary> /// <param name="svcFolderUri">Dropbox folder URI</param> /// <returns>Result that contains list with file metadata</returns> public async Task <dropboxApi.Files.ListFolderResult> GetFilesInFolder(string svcFolderUri) { try { dropboxApi.Files.ListFolderResult result = null; using (var client = new dropboxApi.DropboxClient(AccessToken)) { result = await client.Files.ListFolderAsync(svcFolderUri); } return(result); } catch (Exception) { return(null); } }
/// <summary> /// Gets file or folder metadata (file size, creation time, extension etc.). /// </summary> /// <param name="svcUri">Dropbox URI for the file or folder</param> /// <returns>File or folder metadata</returns> public async Task <dropboxApi.Files.Metadata> GetFileOrFolderMetadata(string svcUri) { try { dropboxApi.Files.Metadata result = null; using (var client = new dropboxApi.DropboxClient(AccessToken)) { result = await client.Files.GetMetadataAsync(svcUri); } return(result); } catch (Exception) { return(null); } }
/// <summary> /// Renames file or folder. /// </summary> /// <param name="oldSvcUri">Dropbox URI for the file or folder to rename</param> /// <param name="newSvcUri">The Dropbox URI for new file or folder name</param> /// <returns>Renamed file or folder metadata</returns> public async Task <dropboxApi.Files.RelocationResult> RenameFileOrFolder(string oldSvcUri, string newSvcUri) { try { dropboxApi.Files.RelocationResult result = null; using (var client = new dropboxApi.DropboxClient(AccessToken)) { result = await client.Files.MoveV2Async(oldSvcUri, newSvcUri, autorename : false); } return(result); } catch (Exception) { return(null); } }
/// <summary> /// Deletes file or folder by the specified Dropbox URI. /// </summary> /// <param name="svcUri">File or Folder URI</param> /// <returns>Deleted file or folder metadata</returns> public async Task <dropboxApi.Files.DeleteResult> DeleteFileOrFolder(string svcUri) { try { dropboxApi.Files.DeleteResult result = null; using (var client = new dropboxApi.DropboxClient(AccessToken)) { result = await client.Files.DeleteV2Async(svcUri); } return(result); } catch (Exception) { return(null); } }
/// <summary> /// Downloads a file by given Dropbox source URI to local directory. /// </summary> /// <param name="svcFileUri">Dropbox file URI</param> /// <param name="localFilePath">Local directory where to download file</param> /// <returns>True if file download went successfully, else False</returns> public async Task <bool> DownloadFile(string svcFileUri, string localFilePath) { try { using (var client = new dropboxApi.DropboxClient(AccessToken)) { var result = await client.Files.DownloadAsync(svcFileUri); using (Stream sourceStream = await result.GetContentAsStreamAsync()) using (FileStream source = File.Open(localFilePath, FileMode.Create)) { await sourceStream.CopyToAsync(source); } } return(true); } catch (Exception) { return(false); } }
/// <summary> /// Uploads the files from PC local directory to Dropbox folder. /// </summary> /// <remarks> /// When providing the 'filePaths' list where the file sub directory does not exist in Dropbox, /// new folder will be automatically created in Dropbox. /// </remarks> /// <param name="svcPath">Dropbox folder URI where to upload files (Example: /app/UploadFolder)</param> /// <param name="localDirPath">Path from where to upload files</param> /// <param name="filePaths">File URIs (Example: [ "/app/UploadFolder/file.jpg", "/app/UploadFolder/SubFolder/file2.jpg" ] etc.)</param> /// <returns>List with uploaded file metadata</returns> public async Task <List <dropboxApi.Files.FileMetadata> > UploadFiles(string svcPath, string localDirPath, List <string> filePaths) { var uploadResults = new List <dropboxApi.Files.FileMetadata>(); try { if (filePaths == null || filePaths.Count() == 0) { throw new ArgumentNullException("UploadFiles: files list was empty"); } foreach (var relativePath in filePaths) { string fullLocalDir = Path.Combine(localDirPath, relativePath); string fullSvcUri = svcPath.ToUri() + relativePath.ToUri(); if (File.Exists(fullLocalDir)) { using (var client = new dropboxApi.DropboxClient(AccessToken)) using (Stream fileStream = File.OpenRead(fullLocalDir)) { var result = await client.Files.UploadAsync(fullSvcUri, body : fileStream); uploadResults.Add(result); } } else { throw new FileNotFoundException($"DropboxManager: File with name: {relativePath} does not exists!"); } } return(uploadResults); } catch (Exception) { return(null); } }