第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 C# 將大文件上傳到另一個(gè) HTTP 服務(wù)?

如何使用 C# 將大文件上傳到另一個(gè) HTTP 服務(wù)?

C#
回首憶惘然 2022-12-24 10:26:47
我正在開發(fā)一個(gè)由 C# 在 .NET Core 2.2 上編寫的項(xiàng)目。在我的代碼中,我需要將一個(gè)大文件(大約 2GB)上傳到遠(yuǎn)程 HTTP 服務(wù)器。我不負(fù)責(zé)遠(yuǎn)程服務(wù)器。我只負(fù)責(zé)上傳邏輯。在 C# 中通過(guò) HTTP 上傳大型本地文件的最佳做法是什么?我試過(guò)下面的代碼https://github.com/AiursoftWeb/Nexus/blob/master/Pylon/Services/HTTPService.cs#L66-L81    public async Task<string> PostFile(string url, string filepath)    {        var request = new HttpClient();        var form = new MultipartFormDataContent();        string responseString = null;        using (var fileStream = new FileStream(filepath, mode: FileMode.Open))        {            using (var bufferedStream = new BufferedStream(fileStream))            {                form.Add(new StreamContent(bufferedStream), "file", new FileInfo(filepath).FullName);                var response = await request.PostAsync(url, form);                responseString = await response.Content.ReadAsStringAsync();                fileStream.Close();            }        }        return responseString;    }我在該代碼中找不到任何錯(cuò)誤,它適用于小文件。(約500MB)但是如果我上傳一個(gè)大約2GB的大文件就會(huì)引發(fā)異常:操作被取消。將內(nèi)容復(fù)制到流時(shí)出錯(cuò)。無(wú)法訪問(wèn)已處置的對(duì)象。對(duì)象名稱:'SslStream'。我猜流在上傳時(shí)被處理掉了。我希望我的整個(gè)文件可以成功上傳到遠(yuǎn)程服務(wù)器,并且該過(guò)程不會(huì)占用我的大部分 RAM。那么我的代碼有什么問(wèn)題呢?有沒(méi)有適合我的例子?附加信息:我查看了上游 HTTP 服務(wù)器的日志,顯示連接已被遠(yuǎn)程客戶端終止。連接持續(xù)了 1.7 分鐘才關(guān)閉。日志說(shuō):現(xiàn)有連接被遠(yuǎn)程主機(jī)強(qiáng)制關(guān)閉 現(xiàn)有連接被遠(yuǎn)程主機(jī)強(qiáng)制關(guān)閉
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊

我發(fā)現(xiàn)了問(wèn)題:HTTP 客戶端的默認(rèn)超時(shí)是 100 秒。源代碼在這里:


https://github.com/dotnet/corefx/blob/master/src/System.Net.Http/src/System/Net/Http/HttpClient.cs#L17


我已經(jīng)像這樣更改了我的代碼:


        public async Task<string> PostFile(string url, string filepath)

        {

            var request = new HttpClient

            {

                Timeout = TimeSpan.FromSeconds(3600)

            };

            var form = new MultipartFormDataContent();

            string responseString = null;

            using (var fileStream = new FileStream(filepath, mode: FileMode.Open))

            {

                using (var bufferedStream = new BufferedStream(fileStream))

                {

                    form.Add(new StreamContent(bufferedStream), "file", new FileInfo(filepath).FullName);

                    var response = await request.PostAsync(url, form);

                    responseString = await response.Content.ReadAsStringAsync();

                    fileStream.Close();

                }

            }

            return responseString;

        }

問(wèn)題解決了。


查看完整回答
反對(duì) 回復(fù) 2022-12-24
  • 1 回答
  • 0 關(guān)注
  • 197 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)