大文件上传错误 - 指定的 CGI 应用程序遇到错误,服务器终止了进程
Error with large file uploads - The specified CGI application encountered an error and the server terminated the process
我们正在 ASP.net 应用程序中通过 REST 请求将 shapefile zip 上传到我们的 GeoServer。小的 .zip 文件 (~2MB) 可以正常工作,但任何比这更大的文件(我们有一个 .zip,大约 70MB)就不行了。 WebRequest.GetResponse() returns 一个 502 Bad Gateway,读取响应流提供了这个错误:
"The specified CGI application encountered an error and the server terminated the process."
这是创建请求并获取响应的代码:
WebRequest request = WebRequest.Create(URL);
request.ContentType = "application/xml";
request.Method = "PUT";
request.Credentials = new NetworkCredential(username, pswd);
Stream requestStream = request.GetRequestStream();
requestStream.Write(contentBytes, 0, contentBytes.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
REST 调用是 /workspaces/{workspaceName}/datastores/{storeName}/{method}.{format},它将文件上传到指定的数据存储,如果不存在则创建它。
contentBytes 是从上传的 HttpPostedFile zip 的 MemoryStream 创建的字节[]。
就像我说的,适用于较小的拉链。谷歌搜索错误似乎表明它来自 Azure 或 IIS,但是,none 的解决方案似乎适合我们的情况 (),因为它不是 .net Core 应用程序。
This 问题似乎有类似的问题,但得到不同的错误消息。增加超时在 C# 或 web.config.
中都不起作用
shapefile 本身似乎没有任何问题,其他 shapefile 查看器能够处理这些 shapefile。
我们最好的猜测最终是我们在某处对 REST 请求达到了某种主体大小限制,并且没有收到有用的错误消息或在 GeoServer 日志中收到任何错误消息。简而言之,我们最终要做的是从通过 GeoServer REST API(简单而干净)上传文件切换到通过 FTP 手动上传,然后使用 URL REST请求中新上传的文件(凌乱复杂):
在我们的 C# 代码中,我们在 "data" 文件夹中为新文件创建了一个 FTP request (getting our FTP credentials from Azure) to create a directory。这是我们通过 REST 上传时导入器放置文件的地方。
Make FTP requests for each file in the .zip, uploading them to the new directory.
最后,make a REST call to import the layer,(使用 /workspaces/{workspaceName}/datastores/{storeName}/{method}.{format}),而不是发送文件body,发送上传的.shp文件的URL
如果任何一步失败,rollback and delete the files in the FTP directory and then delete the directory.
我们正在 ASP.net 应用程序中通过 REST 请求将 shapefile zip 上传到我们的 GeoServer。小的 .zip 文件 (~2MB) 可以正常工作,但任何比这更大的文件(我们有一个 .zip,大约 70MB)就不行了。 WebRequest.GetResponse() returns 一个 502 Bad Gateway,读取响应流提供了这个错误:
"The specified CGI application encountered an error and the server terminated the process."
这是创建请求并获取响应的代码:
WebRequest request = WebRequest.Create(URL);
request.ContentType = "application/xml";
request.Method = "PUT";
request.Credentials = new NetworkCredential(username, pswd);
Stream requestStream = request.GetRequestStream();
requestStream.Write(contentBytes, 0, contentBytes.Length);
requestStream.Close();
WebResponse response = request.GetResponse();
REST 调用是 /workspaces/{workspaceName}/datastores/{storeName}/{method}.{format},它将文件上传到指定的数据存储,如果不存在则创建它。
contentBytes 是从上传的 HttpPostedFile zip 的 MemoryStream 创建的字节[]。
就像我说的,适用于较小的拉链。谷歌搜索错误似乎表明它来自 Azure 或 IIS,但是,none 的解决方案似乎适合我们的情况 (
This 问题似乎有类似的问题,但得到不同的错误消息。增加超时在 C# 或 web.config.
中都不起作用shapefile 本身似乎没有任何问题,其他 shapefile 查看器能够处理这些 shapefile。
我们最好的猜测最终是我们在某处对 REST 请求达到了某种主体大小限制,并且没有收到有用的错误消息或在 GeoServer 日志中收到任何错误消息。简而言之,我们最终要做的是从通过 GeoServer REST API(简单而干净)上传文件切换到通过 FTP 手动上传,然后使用 URL REST请求中新上传的文件(凌乱复杂):
在我们的 C# 代码中,我们在 "data" 文件夹中为新文件创建了一个 FTP request (getting our FTP credentials from Azure) to create a directory。这是我们通过 REST 上传时导入器放置文件的地方。
Make FTP requests for each file in the .zip, uploading them to the new directory.
最后,make a REST call to import the layer,(使用 /workspaces/{workspaceName}/datastores/{storeName}/{method}.{format}),而不是发送文件body,发送上传的.shp文件的URL
如果任何一步失败,rollback and delete the files in the FTP directory and then delete the directory.