Skip to content

Commit d61721b

Browse files
authored
Add files and test (#49)
1 parent f45fb50 commit d61721b

File tree

13 files changed

+97
-36
lines changed

13 files changed

+97
-36
lines changed

src/stream-net-tests/IntegrationTests.cs

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
1-
using Newtonsoft.Json;
2-
using NUnit.Framework;
1+
using NUnit.Framework;
32
using Stream;
43
using System;
54
using System.Collections.Generic;
5+
using System.IO;
66
using System.Linq;
7-
using System.Threading;
87
using System.Threading.Tasks;
98

109
namespace stream_net_tests
@@ -2467,5 +2466,28 @@ public async Task ReadPersonalization()
24672466
Assert.True(d.ContainsKey("duration"));
24682467
Assert.True(d.ContainsKey("results"));
24692468
}
2469+
2470+
[Test]
2471+
public async Task TestUpload()
2472+
{
2473+
Stream.Upload upload;
2474+
2475+
using (var fs = File.OpenRead("../../../helloworld.txt"))
2476+
{
2477+
upload = await _client.Files.Upload(fs, "helloworld.txt");
2478+
Assert.IsNotEmpty(upload.File);
2479+
}
2480+
using (var fs = File.OpenRead("../../../helloworld.txt"))
2481+
{
2482+
upload = await _client.Files.Upload(fs, "helloworld.txt", "text/plain");
2483+
Assert.IsNotEmpty(upload.File);
2484+
}
2485+
2486+
using (FileStream fs = File.OpenRead(@"../../../helloworld.jpg"))
2487+
{
2488+
upload = await _client.Images.Upload(fs, "helloworld.jpg", "image/jpeg");
2489+
Assert.IsNotEmpty(upload.File);
2490+
}
2491+
}
24702492
}
24712493
}

src/stream-net-tests/UtilsTests.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal Credentials()
2424
new Stream.StreamClientOptions()
2525
{
2626
Location = Stream.StreamApiLocation.USEast,
27-
Timeout = 10000
27+
Timeout = 16000
2828
});
2929
}
3030
}
16.8 KB
Loading
256 KB
Binary file not shown.

src/stream-net-tests/stream-net-tests.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
<PackageReference Include="Newtonsoft.Json" Version="12.0.2" />
1313
<PackageReference Include="NUnit" Version="3.12.0" />
1414
<PackageReference Include="NUnit.Console" Version="3.10.0" />
15-
<PackageReference Include="NUnit3TestAdapter" Version="3.15.1" />
15+
<PackageReference Include="NUnit3TestAdapter" Version="3.16.1" />
1616
<PackageReference Include="OpenCover" Version="4.7.922" />
1717
<ProjectReference Include="..\stream-net\stream-net.csproj">
1818
<Name>stream-net</Name>

src/stream-net/IStreamClient.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public interface IStreamClient
1111
Users Users { get; }
1212
Personalization Personalization { get; }
1313

14+
Files Files { get; }
1415
Images Images { get; }
1516

1617
Task ActivityPartialUpdate(string id = null, ForeignIDTime foreignIDTime = null, GenericData set = null, IEnumerable<string> unset = null);

src/stream-net/Images.cs

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,41 @@ public Images(StreamClient client)
1212
_client = client;
1313
}
1414

15-
public async Task<Image> Upload(System.IO.Stream image, string contentType)
15+
public async Task<Upload> Upload(System.IO.Stream image, string name, string contentType)
1616
{
17-
var request = _client.BuildUploadRequest();
17+
var request = _client.BuildImageUploadRequest();
1818

19-
request.SetFileStream(image, contentType);
19+
request.SetFileStream(image, name, contentType);
2020

2121
var response = await _client.MakeRequest(request);
2222

2323
if (response.StatusCode == System.Net.HttpStatusCode.Created)
24-
return JsonConvert.DeserializeObject<Image>(response.Content);
24+
return JsonConvert.DeserializeObject<Upload>(response.Content);
2525

2626
throw StreamException.FromResponse(response);
2727
}
28+
}
29+
30+
public class Files
31+
{
32+
readonly StreamClient _client;
33+
34+
public Files(StreamClient client)
35+
{
36+
_client = client;
37+
}
2838

39+
public async Task<Upload> Upload(System.IO.Stream file, string name, string contentType = null)
40+
{
41+
var request = _client.BuildFileUploadRequest();
42+
request.SetFileStream(file, name, contentType);
43+
44+
var response = await _client.MakeRequest(request);
45+
46+
if (response.StatusCode == System.Net.HttpStatusCode.Created)
47+
return JsonConvert.DeserializeObject<Upload>(response.Content);
48+
49+
throw StreamException.FromResponse(response);
50+
}
2951
}
3052
}

src/stream-net/Rest/RestClient.cs

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
using System;
1+
using System;
22
using System.Net;
33
using System.Net.Http;
4-
using System.Net.Http.Headers;
54
using System.Text;
65
using System.Threading;
76
using System.Threading.Tasks;
@@ -34,16 +33,9 @@ private HttpRequestMessage BuildRequestMessage(System.Net.Http.HttpMethod method
3433
requestMessage.Headers.Add(h.Key, h.Value);
3534
});
3635

37-
3836
if (request.FileStream != null)
3937
{
40-
var content = new MultipartFormDataContent();
41-
var streamContent = new StreamContent(request.FileStream);
42-
43-
streamContent.Headers.Add("Content-Type", request.FileStreamContentType);
44-
45-
content.Add(streamContent, "file", "image.png");
46-
requestMessage.Content = content;
38+
requestMessage.Content = this.CreateFileStream(request);
4739
}
4840
else if (method == System.Net.Http.HttpMethod.Post || method == System.Net.Http.HttpMethod.Put)
4941
{
@@ -53,6 +45,21 @@ private HttpRequestMessage BuildRequestMessage(System.Net.Http.HttpMethod method
5345
return requestMessage;
5446
}
5547

48+
private HttpContent CreateFileStream(RestRequest request)
49+
{
50+
var content = new MultipartFormDataContent();
51+
var streamContent = new StreamContent(request.FileStream);
52+
53+
if (request.FileStreamContentType != null)
54+
{
55+
streamContent.Headers.Add("Content-Type", request.FileStreamContentType);
56+
}
57+
58+
streamContent.Headers.Add("Content-Disposition", "form-data; name=\"file\"; filename=\"" + request.FileStreamName + "\"");
59+
content.Add(streamContent);
60+
return content;
61+
}
62+
5663
public TimeSpan Timeout
5764
{
5865
get { return _timeout; }
@@ -64,7 +71,7 @@ private async Task<RestResponse> ExecuteHttpRequest(System.Net.Http.HttpMethod m
6471
var requestMessage = BuildRequestMessage(method, url, request);
6572
using (var cts = new CancellationTokenSource(_timeout))
6673
{
67-
HttpResponseMessage response = await _client.SendAsync(requestMessage, cts.Token);
74+
var response = await _client.SendAsync(requestMessage, cts.Token);
6875
return await RestResponse.FromResponseMessage(response);
6976
}
7077
}

src/stream-net/Rest/RestRequest.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using System;
2-
using System.Collections.Generic;
1+
using System.Collections.Generic;
32

43
namespace Stream.Rest
54
{
@@ -29,6 +28,8 @@ internal RestRequest(string resource, HttpMethod method)
2928
public System.IO.Stream FileStream { get; private set; }
3029
public string FileStreamContentType { get; private set; }
3130

31+
public string FileStreamName { get; private set; }
32+
3233
public void AddHeader(string name, string value)
3334
{
3435
_headers[name] = value;
@@ -44,9 +45,10 @@ public void SetJsonBody(string json)
4445
JsonBody = json;
4546
}
4647

47-
public void SetFileStream(System.IO.Stream stream, string contentType)
48+
public void SetFileStream(System.IO.Stream stream, string name, string contentType)
4849
{
4950
FileStream = stream;
51+
FileStreamName = name;
5052
FileStreamContentType = contentType;
5153
}
5254

src/stream-net/Rest/RestResponse.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using System.Linq;
1+
using System;
42
using System.Net;
53
using System.Net.Http;
6-
using System.Text;
74
using System.Threading.Tasks;
85

96
namespace Stream.Rest

0 commit comments

Comments
 (0)