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));
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #5
0
        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;
        }