为什么我没有在 Indy HTTP 连接 FireMonkey 中获取所有图像数据?

Why I do not get all the image data in an Indy HTTP connection FireMonkey?

我正在 FireMonkey 中开发移动应用程序,我想用智能手机相机拍照并将其存储在我的 Firebird 数据库中。

我在通过我使用的 HTTP 连接传递图像数据时遇到了几个问题,因为我没有在服务器中获取所有图像数据,而且我认为 GET 请求中的参数有一个最大大小HTTP 连接或类似的东西。

这是我使用的代码:

在流中保存图像数据。将流传输到 JSON

stream := TMemoryStream.Create;
try
  image.Bitmap.SaveToStream(stream);
  stream.Position := 0;
  jsonPhoto := TJSONArray.Create;
  try
    jsonPhoto := TDBXJSONTools.StreamToJSON(stream, 0, stream.Size);
  finally
    //jsonPhoto.Free;
  end;
finally
  stream.Free;
end;

图像数据所在的 jsonPhoto.toString 的大小为 2368 字节

通过 HTTP 连接向服务器发送数据

try
  result := IdHTTP1.Get(TIdURI.PathEncode('http://'+MyDirIP+':8080/DATABASE_NAME?USERNO='+userNum+'&BUILDINGNO='+jsonBuildNo+'&BUILDINGNAME='+jsonBuildName+'&OBJECTNO='+jsonObjNo+'&OBJECTNAME='+jsonObjName+'&PHOTO='+jsonPhoto.ToString+'&NOTE='+memo_Notes.Lines.Text));
except
  on E: Exception do begin
     ShowMessage('Error connection: '+E.Message);
  end;
end;

我在服务器上得到的jsonPhoto.toString的内容并不是我发送的所有数据,因此我认为HTTP连接中默认有一个参数size。而且我测试过接收到的图片数据大小是999 bytes。在其他参数中,我毫无问题地获得了所有信息。

此外,当我在服务器中获取数据时,我应该将其像 json 文本或流一样保存在数据库中吗?

谢谢!

不要使用 GET 请求。 GET 有大小限制,具体取决于服务器设置,因为所有参数都在 URL.

中发送

使用POST代替GET

Should I save it in database like a json text or like a stream?

这取决于您将如何继续使用这些数据。为了便于访问图像数据 - 最好存储为流。