亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

上傳json圖片發送api請求

上傳json圖片發送api請求

紅顏莎娜 2023-12-14 14:34:16
我想將圖像作為 json 發送到 post api,但是當我以 json 形式發送圖像的 url 時,響應顯示錯誤。但是在郵遞員中,當我通過文件上傳發送圖像時,它可以工作。我的json:{name:"xxx",image:"someurl"}我的 C# 代碼: {            string url = "xxxxxxxxxx";            HttpWebRequest webRequest = null;            HttpWebResponse webResponse = null;            string responseFromServer = "";            webRequest = (HttpWebRequest)WebRequest.Create(url);            webRequest.Credentials = CredentialCache.DefaultCredentials;            webRequest.ContentType = "application/json";                       webRequest.Method = "POST";            webRequest.ReadWriteTimeout = 300000;            // Get the response.            using (var streamWriter = new StreamWriter(webRequest.GetRequestStream()))            {                streamWriter.Write(jsonREQ);                streamWriter.Flush();                streamWriter.Close();            }            using (webResponse = (HttpWebResponse)webRequest.GetResponse())            {                Stream responseStream = webResponse.GetResponseStream();                using (StreamReader sr = new StreamReader(responseStream))                {                    responseFromServer = sr.ReadToEnd();                    sr.Close();                }                webResponse.Close();            }            return responseFromServer;        }這里的 json 請求有 json,當我使用這個時,我沒有得到預期的響應,但是當我使用 postman 進行文件上傳時, 它可以工作,請建議我一種以 json 發送圖像的方法。(* 已嘗試過 base64 和 byte ,它沒有按預期工作*)
查看完整描述

1 回答

?
一只斗牛犬

TA貢獻1784條經驗 獲得超2個贊

嘗試這個:


var formData = new FormData();

formData.append("image", fileInputElement.files[0]);


var request = new XMLHttpRequest();

request.open("POST", "http://example.com/submitform.php");

request.send(formData);

并在服務器上將其上傳到另一臺服務器:


string responseString;


using (var fileStream = new FileStream(filePath, FileMode.Open))

{

    var formData = new MultipartFormDataContent {

        { new StreamContent(fileStream), @"image", Path.GetFileName(filePath) }

    };


    var request = (HttpWebRequest)WebRequest.Create("URL");

    request.Method = WebRequestMethods.Http.Post;


    request.AllowWriteStreamBuffering = false;

    request.SendChunked = true; // set to true to avoid exception when AllowWriteStreamBuffering = false and ContentLength is not set

    request.Headers.Add("abc", "def");


    request.ContentType = formData.Headers.ContentType.ToString();


    try

    {

        // Get the request stream with the default timeout

        using (Stream requestStream = await request.GetRequestStreamAsyncWithTimeout())

        {

            // Upload the file with no timeout

            await formData.CopyToAsync(requestStream);

        }


        // Get response with the default timeout, and parse the response body

        using (WebResponse response = await request.GetResponseAsyncWithTimeout())

        using (Stream responseStream = response.GetResponseStream())

        using (StreamReader reader = new StreamReader(responseStream))

        {

            responseString = reader.ReadToEnd();

        }

    }

    catch (WebException ex)

    {

        if (ex.Status == WebExceptionStatus.Timeout)

        {

            throw new TimeoutException("Timeout while uploading file.", ex);

        }

        throw;

    }

}

ResultModel result = JsonConvert.DeserializeObject<ResultModel>(responseString);

這些擴展可以讓您的上傳請求在文件較大或連接速度較慢時不會超時:


public static class WebRequestExtensions

{

    public static async Task<Stream> GetRequestStreamAsyncWithTimeout(this WebRequest request, int? millisecondsTimeout = null)

    {

        Task<Stream> getTask = request.GetRequestStreamAsync();


        if (await Task.WhenAny(getTask, Task.Delay(request.Timeout)) == getTask)

        {

            // task completed without timeout

            return getTask.Result;

        }

        else

        {

            // timeout

            var ex = new TimeoutException();

            throw new WebException(ex.Message, ex, WebExceptionStatus.Timeout, null);

        }

    }


    public static async Task<WebResponse> GetResponseAsyncWithTimeout(this WebRequest request, int? millisecondsTimeout = null)

    {

        Task<WebResponse> getTask = request.GetResponseAsync();


        if (await Task.WhenAny(getTask, Task.Delay(request.Timeout)) == getTask)

        {

            // task completed without timeout

            return getTask.Result;

        }

        else

        {

            // timeout

            var ex = new TimeoutException();

            throw new WebException(ex.Message, ex, WebExceptionStatus.Timeout, null);

        }

    }


    private static T AsyncToSyncWithTimeout<T>(

        Func<AsyncCallback, object, IAsyncResult> begin,

        Func<IAsyncResult, T> end,

        int millisecondsTimeout)

    {

        var iar = begin(null, null);

        if (!iar.AsyncWaitHandle.WaitOne(millisecondsTimeout))

        {

            var ex = new TimeoutException();

            throw new WebException(ex.Message, ex, WebExceptionStatus.Timeout, null);

        }

        return end(iar);

    }

}


查看完整回答
反對 回復 2023-12-14
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號