POST接口上传文件1M以下没问题超过1M提示500错误

sinat_32007035 2020-10-16 11:51:15
POST接口上传文件1M以下没问题超过1M提示500错误

public static string webPost(string apiurl, string fpath, string type, string access_token, AttachmentInfo atts)
{
string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n");
byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n");
ServicePointManager.CheckCertificateRevocationList = true;
ServicePointManager.DefaultConnectionLimit = 512;
ServicePointManager.Expect100Continue = true;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
//1.HttpWebRequest
System.GC.Collect();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(apiurl);
request.ContentType = "multipart/form-data; boundary=" + boundary;
request.Method = type;
request.KeepAlive = false;
//request.Credentials = CredentialCache.DefaultCredentials;
string head = "Bearer " + access_token;
request.Headers.Add("Authorization", head);
request.Timeout = 1000 * 3600;
request.ReadWriteTimeout = 1000 * 3600;

using (Stream stream = request.GetRequestStream())
{
string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n";
byte[] buffer = new byte[4096];
int bytesRead = 0;
string header = string.Format(headerTemplate, "file", atts.Name);
byte[] headerbytes = Encoding.GetEncoding("UTF-8").GetBytes(header);


//1.2 file
stream.Write(boundarybytes, 0, boundarybytes.Length);
stream.Write(headerbytes, 0, headerbytes.Length);
using (FileStream fileStreamss = new FileStream(fpath, FileMode.Open, FileAccess.Read))
{
while ((bytesRead = fileStreamss.Read(buffer, 0, buffer.Length)) != 0)
{
stream.Write(buffer, 0, bytesRead);
}
}

//1.3 form end
stream.Write(endbytes, 0, endbytes.Length);
}
//2.WebResponse
string result;
try
{
request.ProtocolVersion = HttpVersion.Version10;

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader streamReader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string text = streamReader.ReadToEnd();
result = text;
response.Close();
}
catch (Exception ex)
{
result = ex.Message;
}
finally
{
request.Abort();
System.GC.Collect();
}
return result;

}
...全文
18241 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
.net 有现成的支持 html4 的 multipart/form-data 协议框架实现,例如写代码:
var result = await new WebClient().UploadFileTaskAsync("http://127.0.0.100/site1", file);

“只要一行代码”就行了,用不着自己写一大堆很乱的代码!

但是从设计上说,传大一点点儿的文件需要考虑性能,而这种方式不够快,这种设计还是属于最初级的方式,不够符合大数据时代的 api 设计习惯。
  • 打赏
  • 举报
回复
asp.net 设置了最大上传大小。

但是上传稍微大一点内容,asp.net 那种做法并不可取。通常上传要先在浏览器端编程序进行判断、分片,再分段上传,使用 html5 协议来编程,才能保证用户体验。用前端技术,而不是 asp.net 技术开发。
Dogfish 2020-10-24
  • 打赏
  • 举报
回复
一般都是限制问题。把接受size弄大点。
正怒月神 版主 2020-10-21
  • 打赏
  • 举报
回复
我记得config中,有设置文件上传大小。
Hello,Mr.S 2020-10-21
  • 打赏
  • 举报
回复
引用 1 楼 sinat_32007035 的回复:
各种配置之类的 都试过了 还是一样报错 对面乙方自己这边试上传就没问题
那你可以换个思路,自己简单写一个接收附件的接口项目,部署到他们的服务器,然后测试你写的接口。这样可以排除乙方服务器有存在nginx、apache之类的配置限制大小。
  • 打赏
  • 举报
回复
webconfig, 服务器IIS配置。 找这2个地方吧。
  • 打赏
  • 举报
回复
两个问题,接收方的最大接收文件。以及本地上传的配置文件大小。 限制问题。
threenewbee 2020-10-17
  • 打赏
  • 举报
回复
抓包看看,是不是服务器有限制,返回什么错误信息
sinat_32007035 2020-10-16
  • 打赏
  • 举报
回复
各种配置之类的 都试过了 还是一样报错

对面乙方自己这边试上传就没问题

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧