Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件

Posted

技术标签:

【中文标题】Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件【英文标题】:Streamreader cannot read file in server 500 error while reading large JSON file 【发布时间】:2022-01-06 06:15:11 【问题描述】:

我正在尝试读取一个大型 (2.3mb) json 文件并将其作为 json 在网络上返回。

string path = AppDomain.CurrentDomain.BaseDirectory + @"GeoJson/MaliCommunes.geo.json";
string json;

using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("iso-8859-1")))

    json = sr.ReadToEnd();

javascriptSerializer JsonSerializer = new JavaScriptSerializer();
        
object data = JsonSerializer.DeserializeObject(json);

return new JsonResult()

    Data = data,
    ContentType = "application/json",
    ContentEncoding = Encoding.UTF8,
    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    MaxJsonLength = Int32.MaxValue
;

这适用于本地主机,但是当我将其上传到服务器时,我在这一行 using (StreamReader sr = new StreamReader(path, Encoding.GetEncoding("iso-8859-1"))) 上收到 500 错误“找不到文件”

我在网络配置中尝试了以下内容:

    在 httpRuntime 中添加 maxRequestLength 为 jsonSerialization 添加 maxJsonLength

我的猜测是,要么文件被曲解(它确实有法语重音字符),要么文件太大而导致服务器出现问题。

【问题讨论】:

听起来您的 AppDomain.CurrentDomain.BaseDirectory 在服务器上无法正常工作? 确实如此,它用较小的 geojson 文件替换了该文件,并且没有任何问题。 服务器有内存限制吗? 所以你已经有了 json 数据。您正在努力将其解压缩到一个对象中,只是为了再次重新序列化它?只需提供文件即可。 这并不能解决我的问题,因为我仍然需要使用某种阅读器来阅读文件。 【参考方案1】:
    更仔细地检查大 json 文件的名称。它可以有一个不可见的扩展名。通过尝试手动打开 json 文件来检查路径。只需使用 Windows 资源管理器输入完整路径。 在大json文件的安全选项卡中查看权限,并与正常工作的json文件的权限进行比较。

【讨论】:

【参考方案2】:

我去掉了法语口音,它起作用了

【讨论】:

以上是关于Streamreader 在读取大型 JSON 文件时无法读取服务器 500 错误中的文件的主要内容,如果未能解决你的问题,请参考以下文章

StreamReader缓冲GZIP的流式HTTP?

关于FileStream读取大文件问题

StreamReader 和寻找

C# 文件流 streamreader如何读取文本指定行的数据?

使用自定义的行分隔符,从StreamReader中读取一行字符串

C#中StreamReader读取中文时出现乱码问题总结