public static async Task Run() { var options = new Options { ClientId = "...", ClientSecret = "...", CallbackUrl = "https://login.live.com/oauth20_desktop.srf", AutoRefreshTokens = true, PrettyJson = false, ReadRequestsPerSecond = 2, WriteRequestsPerSecond = 2 }; // Initialize a new Client (without an Access/Refresh tokens var client = new Client(options); // Get the OAuth Request Url var authRequestUrl = client.GetAuthorizationRequestUrl(new[] {Scope.Basic, Scope.Signin, Scope.SkyDrive, Scope.SkyDriveUpdate}); // Navigate to authRequestUrl using the browser, and retrieve the Authorization Code from the response var authCode = await GetAuthCode(client, new[] { Scope.Signin, Scope.Basic, Scope.SkyDrive }); // Exchange the Authorization Code with Access/Refresh tokens var token = await client.GetAccessTokenAsync(authCode); // Get user profile var userProfile = await client.GetMeAsync(); Console.WriteLine("Name: " + userProfile.Name); string preferredEmail = userProfile.Emails == null ? "(n/a)" : userProfile.Emails.Preferred; Console.WriteLine("Preferred Email: " + preferredEmail); // Get user photo var userProfilePicture = await client.GetProfilePictureAsync(PictureSize.Small); Console.WriteLine("Avatar: " + userProfilePicture); // Retrieve the root folder var rootFolder = await client.GetFolderAsync(); Console.WriteLine("Root Folder: {0} (Id: {1})", rootFolder.Name, rootFolder.Id); // Retrieve the content of the root folder var folderContent = await client.GetContentsAsync(rootFolder.Id); foreach (var item in folderContent) { Console.WriteLine("\tItem ({0}: {1} (Id: {2})", item.Type, item.Name, item.Id); } // Initialize a new Client, this time by providing previously requested Access/Refresh tokens options.AccessToken = token.Access_Token; options.RefreshToken = token.Refresh_Token; var client2 = new Client(options); // Search for a file by pattern (e.g. *.docx for MS Word documents) //TODO: Uncomment the below when PR #5 is merged //var wordDocuments = await client.SearchAsync("*.docx"); //Console.WriteLine(string.Format("Found {0} Word documents", wordDocuments.Count())); // Find a file in the root folder var file = folderContent.FirstOrDefault(x => x.Type == File.FileType); // Download file to a temporary local file var tempFile = Path.GetTempFileName(); using (var fileStream = System.IO.File.OpenWrite(tempFile)) { var contentStream = await client2.DownloadAsync(file.Id); await contentStream.CopyToAsync(fileStream); } // Upload the file with a new name using (var fileStream = System.IO.File.OpenRead(tempFile)) { await client2.UploadAsync(rootFolder.Id, fileStream, "Copy Of " + file.Name); } }
public async Task Run() { bool overWrite = true; OverwriteOption overwriteOption = OverwriteOption.DoNotOverwrite; if (overWrite) overwriteOption = OverwriteOption.Overwrite; // Initialize a new Client, this time by providing previously requested Access/Refresh tokens Options options = await GetAuthorizationToken(); Client client = new Client(options); // Retrieve the root folder Folder rootFolder = await client.GetFolderAsync(); IEnumerable<File> folderContent = await GetFolderContent(rootFolder, client); // Search for a file by pattern (e.g. *.docx for MS Word documents) //TODO: Uncomment the below when PR #5 is merged //var wordDocuments = await client.SearchAsync("*.docx"); //Debug.WriteLine(string.Format("Found {0} Word documents", wordDocuments.Count())); //string fileToDownload = ""; //var file = await DownloadFile(folderContent, client2, fileToDownload); foreach (string filePath in Directory.GetFiles(@"D:\dev\mecloud\Docs\TestFiles")) { string origFileName = Path.GetFileName(filePath); // Upload the file with a new name using (Stream fileStream = System.IO.File.Open(filePath,FileMode.Open))//_directory.OpenRead(filePath)) { int splitCount = 2; Stream[] splitStream = new Stream[splitCount]; int[] byteLenghtOfSegment = new int[splitCount]; // First seg Len byteLenghtOfSegment[0] = (int)Math.Ceiling((double) (fileStream.Length / (decimal)splitCount)); byteLenghtOfSegment[1] = (int)(fileStream.Length - byteLenghtOfSegment[0]); int fileOffset = 0; Stream ss = new MemoryStream(); using (BinaryReader reader = new BinaryReader(fileStream)) using (BinaryWriter writer = new BinaryWriter(ss)) { writer.Write(reader.ReadBytes(byteLenghtOfSegment[0])); await client.UploadAsync(rootFolder.Id, writer.BaseStream, origFileName + "1", overwriteOption); writer.Flush(); writer.BaseStream.SetLength(0); writer.Write(reader.ReadBytes(byteLenghtOfSegment[1])); await client.UploadAsync(rootFolder.Id, writer.BaseStream, origFileName + "2", overwriteOption); } //BufferedStream bufferedStream = new BufferedStream(fileStream); //bufferedStream.Write(); //splitStream[0].Write(fileStream.Read()); //// make await //BitArray byteLength; //fileStream.CopyTo(splitStream[0], (int) byteLength[0]); //fileStream.Write(splitStream[0].,fileOffset, (int) byteLength[0]); Debug.WriteLine("Uploading: " + origFileName); //await client.UploadAsync(rootFolder.Id, fileStream, origFileName, overwriteOption); } string newFileName1 = origFileName + "1"; string path = Path.GetDirectoryName(filePath);//_directory.GetDirectoryName(filePath); // Refresh Index on Server in root // TODO jpatel 5.21.15: Test exceptions by commenting out! folderContent = await GetFolderContent(rootFolder, client); await DownloadFile(folderContent, client, origFileName + "1", path, newFileName1); string newFileName2 = origFileName + "2"; path = Path.GetDirectoryName(filePath);//_directory.GetDirectoryName(filePath); // Refresh Index on Server in root // TODO jpatel 5.21.15: Test exceptions by commenting out! folderContent = await GetFolderContent(rootFolder, client); await DownloadFile(folderContent, client, origFileName + "2", path, newFileName2); MergeFiles(path + "\\" + newFileName1, path + "\\" + newFileName2, path + "\\" + origFileName + "New.jpg"); } }