Мое приложение считывает шейп-файлы со стороны клиента и сервера и отображает их на карте.У меня нет проблем с загрузкой шейп-файлов со стороны клиента.Пользователь сначала загружает файл из браузера, а объект File передается бэкэнду.
public ActionResult ShpRead()
{
try
{
string resultTest = "";
// Get all files from Request object
HttpFileCollectionBase files = Request.Files;
HttpPostedFileBase file = files[0];
string fname;
Stream FileStream = file.InputStream;
BinaryReader br = new BinaryReader(FileStream);
br.ReadBytes(24);
int FileLength = br.ReadInt32();
int FileVersion = br.ReadInt32();
int ShapeType = br.ReadInt32();
double xmin = br.ReadDouble();
double ymin = br.ReadDouble();
double xmax = br.ReadDouble();
double ymax = br.ReadDouble();
double width = xmax - xmin;
double height = ymax - ymin;
br.ReadBytes(32);
//more code for handling each shape type
}
Со стороны сервера интерфейс сначала получает шейп-файл из хранилища Azure, а шейп-файл передаетсяна сервер с AJAX.Затем, используя классы Stream и BinaryReader, программа считывает двоичный файл шейп-файла и извлекает информацию в следующем формате (https://en.wikipedia.org/wiki/Shapefile).
Однако чтение двоичного файла шейп-файла всегда приводит к этой ошибке.
System.IO.EndOfStreamException: Unable to read beyond the end of the stream.
, что наводит меня на мысль, что либо шейп-файлы, загруженные с обеих сторон, не одинаковы, либо метод ShpRead () нельзя использовать как на стороне клиента, так и на стороне сервера.
Если яКак передать шейп-файл, полученный с сервера, на сервер в виде двоичной строки, каков хороший способ анализа строки и извлечения информации?