merging · a18b35744a - SVN.BY: Go Git Service
Tiernan OToole 8 years ago
parent
commit
a18b35744a
3 changed files with 46 additions and 58 deletions
  1. 15 1
      B2Uploader/B2Uploader.csproj
  2. 26 55
      B2Uploader/Program.cs
  3. 5 2
      B2Uploader/packages.config

+ 15 - 1
B2Uploader/B2Uploader.csproj

@@ -64,11 +64,20 @@
64 64
       <Private>True</Private>
65 65
     </Reference>
66 66
     <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
67
-      <HintPath>..\packages\NLog.4.2.2\lib\net45\NLog.dll</HintPath>
67
+      <HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
68 68
       <Private>True</Private>
69 69
     </Reference>
70 70
     <Reference Include="System" />
71 71
     <Reference Include="System.Core" />
72
+    <Reference Include="System.Net.Http.Extensions, Version=2.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
73
+      <HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Extensions.dll</HintPath>
74
+      <Private>True</Private>
75
+    </Reference>
76
+    <Reference Include="System.Net.Http.Primitives, Version=4.2.29.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
77
+      <HintPath>..\packages\Microsoft.Net.Http.2.2.29\lib\net45\System.Net.Http.Primitives.dll</HintPath>
78
+      <Private>True</Private>
79
+    </Reference>
80
+    <Reference Include="System.Net.Http.WebRequest" />
72 81
     <Reference Include="System.Xml.Linq" />
73 82
     <Reference Include="System.Data.DataSetExtensions" />
74 83
     <Reference Include="Microsoft.CSharp" />
@@ -104,6 +113,11 @@
104 113
     </PropertyGroup>
105 114
     <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
106 115
   </Target>
116
+  <Import Project="..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets" Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" />
117
+  <Target Name="EnsureBclBuildImported" BeforeTargets="BeforeBuild" Condition="'$(BclBuildImported)' == ''">
118
+    <Error Condition="!Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=317567." HelpKeyword="BCLBUILD2001" />
119
+    <Error Condition="Exists('..\packages\Microsoft.Bcl.Build.1.0.14\tools\Microsoft.Bcl.Build.targets')" Text="The build restored NuGet packages. Build the project again to include these packages in the build. For more information, see http://go.microsoft.com/fwlink/?LinkID=317568." HelpKeyword="BCLBUILD2002" />
120
+  </Target>
107 121
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
108 122
        Other similar extension points exist, see Microsoft.Common.targets.
109 123
   <Target Name="BeforeBuild">

+ 26 - 55
B2Uploader/Program.cs

@@ -8,6 +8,7 @@ using System.Diagnostics;
8 8
 using System.IO;
9 9
 using System.Linq;
10 10
 using System.Net;
11
+using System.Net.Http;
11 12
 using System.Security.Cryptography;
12 13
 using System.Text;
13 14
 using System.Threading;
@@ -43,7 +44,7 @@ namespace B2Uploader
43 44
         static void Main(string[] args)
44 45
         {
45 46
             var result = CommandLine.Parser.Default.ParseArguments<CmdLineOptions>(args);
46
-
47
+                      
47 48
             logger.Debug("Starting B2Uploader Version: {0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);
48 49
 
49 50
             var existCode = result.MapResult(options => {
@@ -63,7 +64,7 @@ namespace B2Uploader
63 64
                 {
64 65
                     logger.Debug("Listing Buckets");
65 66
                 }
66
-                var buckets = ListBuckets(new ListBucketsRequest() { accountId = auth.accountId }, auth.authorizationToken, auth.apiUrl);
67
+                var buckets = ListBuckets(new ListBucketsRequest() { accountId = auth.accountId }, auth.authorizationToken, auth.apiUrl).Result;
67 68
 
68 69
                 var bucket = buckets.buckets.First();
69 70
 
@@ -136,7 +137,7 @@ namespace B2Uploader
136 137
                         while (!uploaded && retries < 3)
137 138
                         {
138 139
                             try {
139
-                                var uploadURL = GetUploadURL(new GetUploadURLRequest { bucketId = bucket.bucketId }, auth.apiUrl, auth.authorizationToken);
140
+                                var uploadURL = GetUploadURL(new GetUploadURLRequest { bucketId = bucket.bucketId }, auth.apiUrl, auth.authorizationToken).Result;
140 141
                                 var response = UploadFile(uploadURL.authorizationToken, "b2/x-auto", s, uploadURL.uploadUrl);
141 142
                                 if(response != null)
142 143
                                 {
@@ -178,13 +179,13 @@ namespace B2Uploader
178 179
             return JsonConvert.DeserializeObject<AuthorizeResponse>(responseString);
179 180
         }
180 181
 
181
-        static ListBucketsResponse ListBuckets(ListBucketsRequest request, string authToken, string apiUrl)
182
+        static async Task<ListBucketsResponse> ListBuckets(ListBucketsRequest request, string authToken, string apiUrl)
182 183
         {
183 184
             var headers = GetAuthHeaders(authToken);
184 185
 
185
-            string responseString = MakeRequest(apiUrl + "/b2api/v1/b2_list_buckets", headers, JsonConvert.SerializeObject(request));
186
+            string responseString = await MakeRequest2(apiUrl + "/b2api/v1/b2_list_buckets", headers, JsonConvert.SerializeObject(request));
186 187
 
187
-            return JsonConvert.DeserializeObject<ListBucketsResponse>(responseString);
188
+            return  await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<ListBucketsResponse>(responseString));
188 189
         }
189 190
 
190 191
         static List<Tuple<string,string>> GetAuthHeaders(string authToken)
@@ -194,13 +195,12 @@ namespace B2Uploader
194 195
             return headers;
195 196
         }
196 197
 
197
-        static GetUploadURLResponse GetUploadURL(GetUploadURLRequest request, string apiUrl, string authToken)
198
+        static async Task<GetUploadURLResponse> GetUploadURL(GetUploadURLRequest request, string apiUrl, string authToken)
198 199
         {
199
-
200 200
             var headers = GetAuthHeaders(authToken); 
201
-            string responseString = MakeRequest(apiUrl + "/b2api/v1/b2_get_upload_url", headers, JsonConvert.SerializeObject(request));
201
+            string responseString = await MakeRequest2(apiUrl + "/b2api/v1/b2_get_upload_url", headers, JsonConvert.SerializeObject(request));
202 202
             
203
-            return JsonConvert.DeserializeObject<GetUploadURLResponse>(responseString);
203
+            return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<GetUploadURLResponse>(responseString));
204 204
         }
205 205
         static string getValidFilename(string input)
206 206
         {
@@ -225,10 +225,8 @@ namespace B2Uploader
225 225
             headers.Add(new Tuple<string, string>("X-Bz-File-Name", fileName));
226 226
             headers.Add(new Tuple<string, string>("X-Bz-Content-Sha1", sha1));
227 227
 
228
-            using (FileStream fs = System.IO.File.OpenRead(filePath))
229
-            {
230 228
 
231
-                string responseString = MakeRequest(uploadUrl, headers, fs, contentType);
229
+            string responseString = MakeRequest2(uploadUrl, headers, filePath, true, contentType).Result;
232 230
 
233 231
                 var resp = JsonConvert.DeserializeObject<UploadFileResponse>(responseString);
234 232
 
@@ -242,69 +240,42 @@ namespace B2Uploader
242 240
                     //something went wrong!
243 241
                     return null;
244 242
                 }
245
-            }
243
+            
246 244
         }
247 245
 
248 246
         static ListFileNamesResponse ListFileNames(ListFileNamesRequest request, string apiUrl, string authToken)
249 247
         {
250 248
             var headers = GetAuthHeaders(authToken);
251
-            string responseString =  MakeRequest(string.Format("{0}/b2api/v1/b2_list_file_names", apiUrl), headers, JsonConvert.SerializeObject(request));
249
+            string responseString =  MakeRequest2(string.Format("{0}/b2api/v1/b2_list_file_names", apiUrl), headers, JsonConvert.SerializeObject(request)).Result;
252 250
 
253 251
             return JsonConvert.DeserializeObject<ListFileNamesResponse>(responseString);
254 252
         }
255 253
 
256
-
257
-        static string MakeRequest(string url, List<Tuple<string,string>> headers, string data, string contentType = "application/json; charset=urf-8")
258
-        {
259
-            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(data));
260
-            return MakeRequest(url, headers, ms, contentType);
261
-        }
262 254
         
263
-        static string MakeRequest(string url, List<Tuple<string,string>> headers, Stream data, string contentType="application/json; charset=utf-8")
264
-        {
265
-            string reqId = DateTime.Now.Ticks.ToString("X2");
266
-            Stopwatch st = Stopwatch.StartNew();
267
-            try
255
+        static async Task<string> MakeRequest2(string url, List<Tuple<string, string>> headers, string data, bool isFile = false, string contentType = "application/json; charset=utf-8")
268 256
             {
257
+            var client = new HttpClient();
269 258
                 
270
-                logger.Debug("Starting RequestID: {0}", reqId);
271
-                HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
272
-
273
-                req.Method = "POST";
274
-
275 259
                 foreach (var head in headers)
276 260
                 {
277
-                    req.Headers.Add(head.Item1, head.Item2);
261
+                client.DefaultRequestHeaders.Add(head.Item1, head.Item2);
278 262
                 }
279 263
 
280
-                using (var stream = req.GetRequestStream())
264
+            HttpContent content = null;
265
+            if (isFile)
281 266
                 {
282
-                    
283
-                    data.Position = 0;
284
-
285
-                    req.ContentType = contentType;
286
-                    
287
-                    data.CopyTo(stream);
288
-                    data.Flush();
289
-                    
290
-                    stream.Close();
291
-                }
292
-                WebResponse response = (HttpWebResponse)req.GetResponse();
293
-                var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
294
-                response.Close();
295
-                Console.WriteLine("RequId: {0} MakeRequest Took {1}ms",reqId, st.ElapsedMilliseconds);
296
-                return responseString;
267
+                content = new StreamContent(System.IO.File.OpenRead(data));
268
+                content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(contentType);
297 269
             }
298
-            catch (Exception ex)
270
+            else
299 271
             {
300
-                logger.Error("ReqId: {1} Error talking to server: {0}", ex.Message, reqId);
301
-                logger.Error("URL: {0}", url);
302
-                throw;
303
-            }
272
+                content = new StringContent(data);
304 273
         }
305
-
306
-        
274
+            var resp = await client.PostAsync(url, content);
307 275
         
276
+            resp.EnsureSuccessStatusCode();
277
+            return await resp.Content.ReadAsStringAsync();          
278
+        }
308 279
         
309 280
 
310 281
         private static string GetSha1(string fileName)

+ 5 - 2
B2Uploader/packages.config

@@ -1,8 +1,11 @@
1 1
 <?xml version="1.0" encoding="utf-8"?>
2 2
 <packages>
3 3
   <package id="CommandLineParser" version="2.0.275-beta" targetFramework="net45" />
4
+  <package id="Microsoft.Bcl" version="1.1.10" targetFramework="net45" />
5
+  <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net45" />
6
+  <package id="Microsoft.Net.Http" version="2.2.29" targetFramework="net45" />
4 7
   <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
5
-  <package id="NLog" version="4.2.2" targetFramework="net45" />
6
-  <package id="NLog.Config" version="4.2.2" targetFramework="net45" />
8
+  <package id="NLog" version="4.2.3" targetFramework="net45" />
9
+  <package id="NLog.Config" version="4.2.3" targetFramework="net45" />
7 10
   <package id="NLog.Schema" version="4.2.1" targetFramework="net45" />
8 11
 </packages>