我已经建立了采用Delphi XE2和我一个的DataSnap REST服务器已经添加了服务器方法通过T流上传文件:上传文件的DataSnap REST服务器
function TServerMethods.updateUploadFile(sFilename: string; UploadStream: TStream): string;
我希望能够调用这来自许多不同的客户端(Android,iOS等),我一直在使用Postman(Chrome插件)等各种REST客户端来测试该方法。但是到目前为止,我无法让它接受HTTP POST主体的内容。每当我发送POST命令我总是得到如下回应:
{"error":"Message content is not a valid JSON value."}
我已经使用各种不同的“内容类型”设置,但似乎没有任何工作尝试。看起来好像DataSnap坚持的内容是JSON?我试过将一些有效的JSON粘贴到内容区域,但这也给出了相同的错误响应。
是否有人成功使用TStream作为DataSnap服务器方法的输入参数?我应该以另一种方式去做吗?我已经使用TStream作为多次下载文件的输出参数,它运行良好,这是我第一次尝试上传。
UPDATE
我做了一个快速的Delphi DataSnap客户机来测试uploadFile服务器方法而这一切的伟大工程。然后,我使用Fiddler来检查Delphi客户端用来在内容主体中发送TStream的POST命令,并且发现它是一个整数(字节)的JSON数组,例如[37,80,68,70,45,49,46,51,13,10]
。所以我可以看到我可以在POSTing之前修改我的Android/iOS客户端以将二进制数据转换为这种字节数组格式,但这是我无法做到的开销。如果当TStream是一个返回参数时,DataSnap将流入原始二进制数据,为什么它不能将原始二进制数据流作为输入参数?