我正在使用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文本还是像流一样?
谢谢!
答案 0 :(得分:1)
请勿使用GET
请求。 GET
具有大小限制,具体取决于服务器设置,因为所有参数都以URL格式发送。
使用POST
代替GET
我应该像json文本一样将其保存在数据库中还是像流一样?
这取决于您将如何继续使用数据。为了便于以图像形式访问数据 - 最好将其存储为流。