使用Base64的POST文件上传请求

时间:2019-01-29 07:33:38

标签: c# api file-upload multipartform-data

我正在使用客户端Web API在第三方应用程序中创建任务。我可以创建任务并在各处分发,但是现在我一直无法将文件上传到第三方应用程序。

他们没有给我太多有关其api如何处理此POST的信息。相反,他们向我展示了200 OK响应。

我现在尝试了一些新的东西,并决定在我的图书馆中使用Restsharp。

当我上传文件时,我不确定如何上传实际文件,我已成功将其转换为base64,并且想知道如果可能的话,我会将base64放在请求正文中的什么位置。

第三方应用程序确实在任务中创建了一个文件,但由于请求未指向文件,因此它具有0个字节。

我已经尝试过分离参数,以便不使用字符串,但是一位开发人员建议尝试使用它。

我也尝试过创建一个formupload类,然后引用它来上传文件。如果需要,可以提供代码。

            /* Greate uniqueGuid for EntityID */
            Guid guid = Guid.NewGuid();
            string EntityID = guid.ToString();
            // string val = guid.ToString();
            // EntityID = "\"" + val + "\"";
            SetTokenValue("uniqueGuid", EntityID);

            var client = new 
            RestClient("https://www.notallowed.com/media");
            var request = new RestRequest(Method.POST);

            bearerToken = TokenReplace("%(BearerToken)");
            if (bearerToken != null)
            {
                request.AddHeader("Authorization", "Bearer " + bearerToken);
                SetTokenValue("PDF_Token", bearerToken);
            }

            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("accept", "*/*; q=0.5, application/json");
            request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
            request.AddHeader("accept-encoding", "gzip, deflate, br");
            request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
            request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"EntityType\"\r\n\r\npredistributed-tasks\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"EntityId\"\r\n\r\n"+ EntityID +"\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"LocaleIsoCode\"\r\n\r\nen-US\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"files\";  filename=\"UntitledContract.pdf\"\r\nContent-Type: application/pdf\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);

            HttpStatusCode statusCode = response.StatusCode;
            int numericCode = (int) statusCode;
            SetTokenValue("PDF_StatusCode", numericCode);

            request.OnBeforeDeserialization = resp => { resp.ContentType = "application/json";};

我的预期结果是使file参数指向物理文件,并使其使用该文件并将其上传到创建的任务中。

实际输出是实际上没有文件上传,而是由第三方应用程序为该文件创建占位符。

0 个答案:

没有答案