我已經建立了採用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將流入原始二進制數據,爲什麼它不能將原始二進制數據流作爲輸入參數?