Преобразование RestPharp Reqest AddParameter в данные JavaScript для запросов POST - PullRequest
0 голосов
/ 19 февраля 2019

Кто-нибудь знает, что эквивалентно RestSharp:

request.AddParameter("text/plain", body, ParameterType.RequestBody);

в Javascript?Это единственная часть, которую мне не хватает.

Вот рабочий код на C #:

        public static void UploadFile(string bearer)
    {
        var client = new RestClient("...");
        var request = new RestRequest(Method.POST);
        request.AddHeader("Authorization", "Bearer " + bearer);
        request.AddHeader("cache-control", "no-cache");

        var imageLenngth = new FileInfo(@"...").Length;

        request.AddHeader("Content-Type", "image/jpeg");
        request.AddHeader("Content-Length", imageLenngth.ToString());

        byte[] body = File.ReadAllBytes(@"...");

        request.AddParameter("text/plain", body, ParameterType.RequestBody);

        IRestResponse response = client.Execute(request);
    }

И не полностью рабочий код в Ajax JavaScript (он загружается на облачный сервер, но загружает изображение неправильно. Вставляет поврежденное изображение с большим количеством байтов, чем должно быть):

    function uploadingImage(binaryImage) {
        
        var settings = {
            "async": true,
            "crossDomain": true,
            "url": "...",
            "method": "POST",
            "headers": {
                "Content-Type": "image/jpeg",
                "Authorization": "Bearer ...",
                "cache-control": "no-cache",
            },
            "data": binaryImage
        }

        $.ajax(settings).done(function (response) {
            console.log(response);
        });
    }

1 Ответ

0 голосов
/ 19 февраля 2019

Я нашел проблему.Скрипач помог расследовать, что отправляют.По умолчанию передаваемые данные сериализуются.Чтобы предотвратить это, нам нужно явно указать, чтобы не сериализовать его."processData": ложь сделала свое дело.Вот рабочий код:

    function uploadingImage(binaryImage) {
        
        var settings = {
            "async": true,
            "crossDomain": true,
            "url": "...",
            "method": "POST",
            "headers": {
                "Content-Type": "image/jpeg",
                "Authorization": "Bearer ...",
                "cache-control": "no-cache",
            },
            "processData":false,
            "data": binaryImage
        }

        $.ajax(settings).done(function (response) {
            console.log(response);
        });
    }
...