I need to send very large documents (usually Word) to a SnapDevelop API so that I can upload them into a database table. The documents are often greater than 30MB. I initially tried using the SendRequest method. It worked great until the file size got to around 15MB. The help indicates that SendRequest (and most other HTTPClient and RESTClient methods) shouldn't be used for large data and so I switched to PostDataStart/PostData/PostDataEnd.
My PB script is below. I take a word file, read it into a blob, set the content length and then try sending it in chunks. What I'm unclear about is how to setup and define my controller method in SnapDevelop. I want to pass a document ID and the chunked blob to the controller so that I can send both to a service method for processing. What should the arguments for the controller method UploadTest be? Does PostData put the chunked blob into the response body? If so, how do I access it in the controller?
The basic framework of my controller method is also included below.
Has anyone used PostData with SnapDevelop? Any code samples you could share would be much appreciated.
Thanks, Tom
ls_url = gs_webapi_url + 'File/UploadTest/674113'
li_filenum = FileOpen('C:\Temp\large.doc', StreamMode!)
lLen = FileReadEx(li_filenum,blb_roi)
FileClose(li_filenum)
ls_content_length = string(Len(blb_roi))
Client.SetRequestHeader("Content-Length", ls_content_length)
// send the request
li_rc = client.PostDataStart(ls_url)
IF li_rc = 1 THEN
// post the data in parts
li_loop = 0
do while li_rc = 1
li_Loop ++
lblb_PostPart = BlobMid(blb_roi, (li_Loop - 1) * li_PartLen + 1, li_PartLen)
li_rc = client.PostData(lblb_PostPart, li_PartLen)
loop
li_rc = client.PostDataEnd()
// get results
ll_StatusCode = client.GetResponseStatusCode()
ls_StatusText = Client.GetResponseStatusText()
IF ll_StatusCode = 200 THEN
MessageBox('Document Upload','OK, Loops = ' + string(li_loop))
ELSE
MessageBox('Document Upload', ls_statustext + '~r~n~r~n, Loops = ' + string(li_loop))
END IF
END IF
DESTROY client
[HttpPost]
public int UploadTest(string docID)
{
return 0;
}