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

时间:2016-06-23 07:17:34

标签: bitmap firemonkey http-get

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

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

这是我使用的代码:

在STREAM中保存图像数据。通过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连接中默认存在参数大小。此外,我测试过所收到的图像数据大小 999字节。在其他参数中,我可以毫无问题地获得所有信息。

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

谢谢!

1 个答案:

答案 0 :(得分:1)

请勿使用GET请求。 GET具有大小限制,具体取决于服务器设置,因为所有参数都以URL格式发送。

使用POST代替GET

  

我应该像json文本一样将其保存在数据库中还是像流一样?

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