public async Task <Attachment> Upload(Stream file, string description = null, float[] focus = null, IProgress <UploadReport> progress = null) { if (focus != null && focus.Length != 2) { throw new ArgumentException(nameof(focus)); } var boundary = OAuthHelper.GenerateNonce(); using var formData = new MultipartFormDataContent(boundary); using var request = this.Api.CreateCustomRestApiRequest(HttpMethod.Post, "media"); if (description?.Length > 0) { formData.Add(new StringContent(description, EncodingUtil.UTF8), "description"); } if (focus != null) { var focusContent = string.Join(",", focus); formData.Add(new StringContent(focusContent, EncodingUtil.UTF8), "focus"); } formData.Add(new ProgressableUploadContent(file, progressReceiver: progress), "file", "image"); return(await this.Api.SendRequest <Attachment>(request).ConfigureAwait(false)); }
private static HttpWebRequest CreateRequester(Tokens tokens, out string boundary) { var req = tokens.CreatePostRequester(_apiEndpoint, null, false); boundary = OAuthHelper.GenerateNonce(); req.ContentType = $"multipart/form-data; boundary={ boundary }"; return(req); }
private async Task <string> ChunkedUploadAppendImpl(long mediaId, Stream media, long sendSize, long actualSize, long totalLength, int index, IProgress <UploadReport> progressReceiver) { var boundary = OAuthHelper.GenerateNonce(); // 送信データの準備 using var content = new MultipartFormDataContent(boundary); content.Add(new StringContent("APPEND"), "command"); content.Add(new StringContent(mediaId.ToString()), "media_id"); content.Add(new StringContent(index.ToString()), "segment_index"); content.Add(new ProgressableUploadContent(media, actualSize, sendSize, totalLength, progressReceiver: progressReceiver), "media"); return(await this.Api.ApiPostRequestAsync <string>(_apiEndpoint, content) .ConfigureAwait(false)); }
private SortedDictionary <string, string> GetOAuthHeaderParameters(string requestUrl) { SortedDictionary <string, string> sortedParameters = new SortedDictionary <string, string>(); _oauthHeader.Nonce = OAuthHelper.GenerateNonce(); _oauthHeader.Timestamp = OAuthHelper.GenerateTimeStamp(); sortedParameters.Add("oauth_consumer_key", _oauthHeader.ConsumerKey); sortedParameters.Add("oauth_token", _oauthHeader.AccessToken); sortedParameters.Add("oauth_signature_method", _oauthHeader.SignatureMethod); sortedParameters.Add("oauth_version", _oauthHeader.Version); sortedParameters.Add("oauth_timestamp", _oauthHeader.Timestamp); sortedParameters.Add("oauth_nonce", _oauthHeader.Nonce); Dictionary <string, string> queryParameters = UriHelper.GetQueryParameters(requestUrl); foreach (var queryParameter in queryParameters) { sortedParameters.Add(queryParameter.Key, queryParameter.Value); } return(sortedParameters); }
public async Task <MediaResponse> Upload(Stream contentStream, long[] additionalOwners = null, IProgress <UploadReport> progressReceiver = null) { long contentLength = contentStream.Length; progressReceiver?.Report(UploadReport.CreateBegin(contentLength)); var bondary = OAuthHelper.GenerateNonce(); using var content = new MultipartFormDataContent(bondary); if (additionalOwners?.Length > 0) { var joinedAdditionalOwners = string.Join(",", additionalOwners); content.Add(new StringContent(joinedAdditionalOwners), "additional_owners"); } content.Add(new ProgressableUploadContent(contentStream, progressReceiver: progressReceiver), "media"); var result = await this.Api.ApiPostRequestAsync <MediaResponse>(_apiEndpoint, content); progressReceiver?.Report(UploadReport.CreateCompleted(contentLength)); return(result); }
/// <summary> /// Gets a signed Uri for the specified endpoint with the specified parameters appended to the query string. /// This Uri can be used with REST APIs that use OAuth. /// </summary> /// <param name="url">The url that will have the parameters appended to its query string</param> /// <param name="key">OAuth key required by the external system</param> /// <param name="secret">OAuth secret required by the external system</param> /// <param name="parameters">The keys and values that are appended to the query string</param> /// <returns>A signed Uri for the endpoint with the parameters appended to the query string</returns> protected virtual Uri GetSignedUri(string url, string key, string secret, IDictionary<string, string> parameters) { var uri = GetUri(url, parameters); string nurl, nreq; var oAuth = new OAuthHelper(); var nounce = oAuth.GenerateNonce(); var timestamp = oAuth.GenerateTimeStamp(); var signatureUrl = oAuth.GenerateSignature( url: uri, consumerKey: key, consumerSecret: secret, token: string.Empty, tokenSecret: string.Empty, httpMethod: "GET", timeStamp: timestamp, nonce: nounce, signatureType: OAuthHelper.SignatureTypes.HMACSHA1, normalizedUrl: out nurl, normalizedRequestParameters: out nreq); signatureUrl = HttpUtility.UrlEncode(signatureUrl); var parameters2 = new Dictionary<string, string>(); parameters2.Add("oauth_consumer_key", key); parameters2.Add("oauth_nonce", nounce); parameters2.Add("oauth_timestamp", timestamp); parameters2.Add("oauth_signature_method", "HMAC-SHA1"); parameters2.Add("oauth_version", "1.0"); parameters2.Add("oauth_signature", signatureUrl); var uri2 = GetUri(uri.ToString(), parameters2, true); return uri2; }