Post C # MultipartFormContent приложения / октет-поток Winform HttpClient - PullRequest
0 голосов
/ 14 октября 2019

Я пытаюсь отправить один или несколько файлов с моего локального компьютера в API с HttpClient, MultipartFormContent и ContentType: "application/octet-stream", но когда я делаю postSync и вызываю API из локального приложения Winform, результатзадачи (var response = task.Result;) говорит, что это «Unsopported Type File» StatusCode: 415. Я пытался с ByteArrayContent, но все равно не удалось.

Это мой код:

    bool Upload(string url, string path, string localFilename, string fileName, string projectId, string folderId)
    {
        Boolean isFileUploaded = false;
        string xapiKey = "-----";
        try
        {
            HttpClient httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri(url);
            httpClient.DefaultRequestHeaders.Add("x-api-key", xapiKey);

            var fileInfo = new FileInfo(localFilename);
            FileUpload uploadResult = null;
            bool _fileUploaded = false;

            //Extract content file
            FileStream fileStream = File.OpenRead(path);
            var streamContent = new StreamContent(fileStream);
            streamContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data");
            streamContent.Headers.ContentDisposition.FileName = "\"" + Path.GetFileName(path) + "\"";
            streamContent.Headers.ContentType = new MediaTypeHeaderValue("application/octetstream");
            string boundary = Guid.NewGuid().ToString();
            MultipartFormDataContent content = new MultipartFormDataContent(boundary);
            content.Headers.Remove("Content-Type");
            content.Headers.TryAddWithoutValidation("Content-Type", "mulitpart/form-data; boundary=" + boundary);
            content.Add(streamContent);

            //content.Add(new StreamContent(fileStream), "\"file\"", string.Format("\"{0}\"", fileName + fileInfo.Extension));                

            Task taskUpload = httpClient.PostAsync(url, content).ContinueWith(task =>
            {
                if (task.Status == TaskStatus.RanToCompletion)
                {
                    var response = task.Result;
                    if (response.IsSuccessStatusCode)
                    {
                        uploadResult = response.Content.ReadAsAsync<FileUpload>().Result;
                        if (uploadResult != null)
                            _fileUploaded = true;
                    }
                }

                fileStream.Dispose();
            });
            taskUpload.Wait();
            if (_fileUploaded)
                isFileUploaded = true;
            httpClient.Dispose();
        }
        catch (Exception ex)
        {
            isFileUploaded = false;
            throw new Exception(ex.Message);
        }
        return isFileUploaded;
    }
...