merging · a18b35744a - SVN.BY: Go Git Service
Tiernan OToole 8 anni fa
parent
commit
a18b35744a
3 ha cambiato i file con 46 aggiunte e 58 eliminazioni
  1. 15 1
      B2Uploader/B2Uploader.csproj
  2. 26 55
      B2Uploader/Program.cs
  3. 5 2
      B2Uploader/packages.config

+ 15 - 1
B2Uploader/B2Uploader.csproj

64
       <Private>True</Private>
64
       <Private>True</Private>
65
     </Reference>
65
     </Reference>
66
     <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
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
       <Private>True</Private>
68
       <Private>True</Private>
69
     </Reference>
69
     </Reference>
70
     <Reference Include="System" />
70
     <Reference Include="System" />
71
     <Reference Include="System.Core" />
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
     <Reference Include="System.Xml.Linq" />
81
     <Reference Include="System.Xml.Linq" />
73
     <Reference Include="System.Data.DataSetExtensions" />
82
     <Reference Include="System.Data.DataSetExtensions" />
74
     <Reference Include="Microsoft.CSharp" />
83
     <Reference Include="Microsoft.CSharp" />
104
     </PropertyGroup>
113
     </PropertyGroup>
105
     <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
114
     <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
106
   </Target>
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
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
121
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
108
        Other similar extension points exist, see Microsoft.Common.targets.
122
        Other similar extension points exist, see Microsoft.Common.targets.
109
   <Target Name="BeforeBuild">
123
   <Target Name="BeforeBuild">

+ 26 - 55
B2Uploader/Program.cs

8
 using System.IO;
8
 using System.IO;
9
 using System.Linq;
9
 using System.Linq;
10
 using System.Net;
10
 using System.Net;
11
+using System.Net.Http;
11
 using System.Security.Cryptography;
12
 using System.Security.Cryptography;
12
 using System.Text;
13
 using System.Text;
13
 using System.Threading;
14
 using System.Threading;
43
         static void Main(string[] args)
44
         static void Main(string[] args)
44
         {
45
         {
45
             var result = CommandLine.Parser.Default.ParseArguments<CmdLineOptions>(args);
46
             var result = CommandLine.Parser.Default.ParseArguments<CmdLineOptions>(args);
46
-
47
+                      
47
             logger.Debug("Starting B2Uploader Version: {0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);
48
             logger.Debug("Starting B2Uploader Version: {0}", System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);
48
 
49
 
49
             var existCode = result.MapResult(options => {
50
             var existCode = result.MapResult(options => {
63
                 {
64
                 {
64
                     logger.Debug("Listing Buckets");
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
                 var bucket = buckets.buckets.First();
69
                 var bucket = buckets.buckets.First();
69
 
70
 
136
                         while (!uploaded && retries < 3)
137
                         while (!uploaded && retries < 3)
137
                         {
138
                         {
138
                             try {
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
                                 var response = UploadFile(uploadURL.authorizationToken, "b2/x-auto", s, uploadURL.uploadUrl);
141
                                 var response = UploadFile(uploadURL.authorizationToken, "b2/x-auto", s, uploadURL.uploadUrl);
141
                                 if(response != null)
142
                                 if(response != null)
142
                                 {
143
                                 {
178
             return JsonConvert.DeserializeObject<AuthorizeResponse>(responseString);
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
             var headers = GetAuthHeaders(authToken);
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
         static List<Tuple<string,string>> GetAuthHeaders(string authToken)
191
         static List<Tuple<string,string>> GetAuthHeaders(string authToken)
194
             return headers;
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
             var headers = GetAuthHeaders(authToken); 
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
         static string getValidFilename(string input)
205
         static string getValidFilename(string input)
206
         {
206
         {
225
             headers.Add(new Tuple<string, string>("X-Bz-File-Name", fileName));
225
             headers.Add(new Tuple<string, string>("X-Bz-File-Name", fileName));
226
             headers.Add(new Tuple<string, string>("X-Bz-Content-Sha1", sha1));
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
                 var resp = JsonConvert.DeserializeObject<UploadFileResponse>(responseString);
231
                 var resp = JsonConvert.DeserializeObject<UploadFileResponse>(responseString);
234
 
232
 
242
                     //something went wrong!
240
                     //something went wrong!
243
                     return null;
241
                     return null;
244
                 }
242
                 }
245
-            }
243
+            
246
         }
244
         }
247
 
245
 
248
         static ListFileNamesResponse ListFileNames(ListFileNamesRequest request, string apiUrl, string authToken)
246
         static ListFileNamesResponse ListFileNames(ListFileNamesRequest request, string apiUrl, string authToken)
249
         {
247
         {
250
             var headers = GetAuthHeaders(authToken);
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
             return JsonConvert.DeserializeObject<ListFileNamesResponse>(responseString);
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
                 foreach (var head in headers)
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
         private static string GetSha1(string fileName)
281
         private static string GetSha1(string fileName)

+ 5 - 2
B2Uploader/packages.config

1
 <?xml version="1.0" encoding="utf-8"?>
1
 <?xml version="1.0" encoding="utf-8"?>
2
 <packages>
2
 <packages>
3
   <package id="CommandLineParser" version="2.0.275-beta" targetFramework="net45" />
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
   <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
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
   <package id="NLog.Schema" version="4.2.1" targetFramework="net45" />
10
   <package id="NLog.Schema" version="4.2.1" targetFramework="net45" />
8
 </packages>
11
 </packages>