【发布时间】:2019-05-21 15:55:52
【问题描述】:
我正在使用 HttpClient 和 PostAsync 向我的服务器发送一个大型视频文件(平均文件大小为 50mb)。我遇到了一个异常(请参阅下文了解完整的异常详情)。我发现一篇文章说可以处理的最大文件大小为 1mb 或更小,这是真的吗?如果是这样,我怎样才能增加最大文件大小?
{System.Net.Http.HttpRequestException: 发送请求时出错---> System.IO.IOException: 写入请求时出错---> System.Net.Sockets.SocketException: 套接字已关闭 在 System.Net.WebConnection.EndWrite(System.Net.HttpWebRequest 请求,System.Boolean throwOnError,System.IAsyncResult 结果)[0x000cc] 在 :0 在 System.Net.WebConnectionStream.WriteAsyncCB (System.IAsyncResult r) [0x00013] 在 :0 --- 内部异常堆栈跟踪结束 --- 在 System.Net.WebConnectionStream.EndWrite (System.IAsyncResult r) [0x000b8] 在 :0 在 System.IO.Stream+c.b__53_1(System.IO.Stream 流,System.IAsyncResult asyncResult)[0x00000] in :0 在(包装器委托调用)System.Func
3[System.IO.Stream,System.IAsyncResult,System.Threading.Tasks.VoidTaskResult].invoke_TResult_T1_T2(System.IO.Stream,System.IAsyncResult) at System.Threading.Tasks.TaskFactory1+FromAsyncTrimPromise1[TResult,TInstance].Complete (TInstance thisRef, System.Func3[T1,T2,TResult] endMethod, System.IAsyncResult asyncResult, System.Boolean requiresSynchronization) [0x00000] in :0 --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在:0 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x0003e] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task 任务) [0x00028] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00008] in :0 在 System.Runtime.CompilerServices.ConfiguredTaskAwaitable+ConfiguredTaskAwaiter.GetResult () [0x00000] 在:0 在 System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x0036e] in :0 --- 内部异常堆栈跟踪结束 --- 在 System.Net.Http.HttpClientHandler+d__64.MoveNext () [0x00489] 在:0 --- 从之前抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] 在:0 在 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task 任务) [0x0003e] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task 任务) [0x00028] in :0 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task 任务) [0x00008] in :0 在 System.Runtime.CompilerServices.ConfiguredTaskAwaitable1+ConfiguredTaskAwaiter[TResult].GetResult () [0x00000] in <df077aeeed724748974ac70c763795f3>:0 at System.Net.Http.HttpClient+<SendAsyncWorker>d__49.MoveNext () [0x000ca] in <e4f3fb4cf2054f718c1099b587ec6f1e>:0 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () [0x0000c] in <df077aeeed724748974ac70c763795f3>:0 at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (System.Threading.Tasks.Task task) [0x0003e] in <df077aeeed724748974ac70c763795f3>:0 at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Threading.Tasks.Task task) [0x00028] in <df077aeeed724748974ac70c763795f3>:0 at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd (System.Threading.Tasks.Task task) [0x00008] in <df077aeeed724748974ac70c763795f3>:0 at System.Runtime.CompilerServices.TaskAwaiter1[TResult].GetResult () [0x00000] in :0 在 C:\Users\lawre\source\repos\TBSMobile\TBSMobile\TBSMobile\View\MainMenu.xaml.cs:1088 中的 TBSMobile.View.MainMenu+d__22.MoveNext () [0x00b96] }
byte[] crVideoData;
if (!string.IsNullOrEmpty(crvideo))
{
crVideoData = File.ReadAllBytes(crvideo);
}
else
{
crVideoData = null;
}
try
{
if (!string.IsNullOrEmpty(crvideo))
{
var vidlink = "http://" + ipaddress + Constants.requestUrl + "Host=" + host + "&Database=" + database + "&Contact=" + contact + "&Request=Lqr9fy";
string vidcontentType = "application/json";
JObject vidjson = new JObject
{
{ "CAFNo", crcafNo },
{ "CAFDate", crcafDate },
{ "Video", crVideoData }
};
HttpClient vidclient = new HttpClient();
var vidresponse = await vidclient.PostAsync(vidlink, new StringContent(vidjson.ToString(), Encoding.UTF8, vidcontentType));
if (vidresponse.IsSuccessStatusCode)
{
await conn.QueryAsync<CAFTable>("UPDATE tblCaf SET LastSync = ? WHERE CAFNo = ?", DateTime.Parse(current_datetime), crcafNo);
}
}
else
{
await conn.QueryAsync<CAFTable>("UPDATE tblCaf SET LastSync = ? WHERE CAFNo = ?", DateTime.Parse(current_datetime), crcafNo);
}
}
catch(Exception ex)
{
Crashes.TrackError(ex);
}
【问题讨论】:
-
@Laserence:希望这个链接有帮助,stackoverflow.com/questions/51866321/…
-
你是分块发送数据吗?
-
@G.hakim no bro 你能远程我的电脑看看有什么问题吗?
-
@G.hakim 我正在发送整个字节数组我尝试了 Krunal 的建议,现在没有例外,但没有创建视频
-
好吧,我现在不能远程,但我可以给你一个建议链接检查 this 那里的人将大文件作为分区或数据块共享
标签: c# xamarin xamarin.forms