I have an app on mobile windows tablets that sends .jpg pictures files to server webapp via UrlConnection. About 50% of the time the file is saved on the server as a 0kb file and the other 50% of time it works fine. The app also sends .pdf files the same way but they are always saved on the server correctly. Here is the coded that I use to send the files. Can someone tell me what I am doing wrong?
The picture files are less than 500kb size and I always get 200 “OK” response back to the mobile app.
My tests from my laptop via Wifi always works, so it is very hard for me to debug.
WinMain.ArchivePdfConnector.ClearRequestHeaders //This is the URLConnect opject that is placed on the window
var sql as string
var Rs as rowset
var filename as string
var fi as FolderItem
sql = "Select * from Signature where SendDone IsNull or SendDone = '' Order By ID DESC LIMIT 1"
Try
rs = DB1.SelectSQL(SQL)
if rs <> Nil then
if rs.AfterLastRow then
rs.close
return
else
filename = rs.column("FolderPath").StringValue
//The filename is saved as .png becasuse the signature file is .png but it is the same filename as the workorder .pdf
//So to get the correct .pdf filename, I need to change the extension on the filename from the database.
//All the .jpg pictures filenames are also saved in the Signature table.
filename = filename.replace(".png", ".pdf")//all jpg's are sent also because they are not png's
fi = new FolderItem(filename)
sendDone = rs.Column("ID").IntegerValue
if fi.Exists then
//this will send a .pdf or .jpg file, one at a time
Var b As BinaryStream = BinaryStream.Open(fi)
Var url As String = WWWAddress + "/ArchivePdfFile?Name=" + EncodeURLComponent(fi.Name)
WinMain.ArchivePdfConnector.AllowcertificateValidation = True
WinMain.ArchivePdfConnector.RequestHeader("Authorization") = "Basic " + EncodeBase64(userp)
WinMain.ArchivePdfConnector.SetRequestContent(b.Read(b.Length), "application/octet-stream")
WinMain.ArchivePdfConnector.Send("POST", url)
else
rs.close
db1.ExecuteSQL("update Signature set SendDone = -1 where ID = ?", sendDone)
ArchivePdf
return
end if
end if
else
return
end if
rs.close
//See rsocket ArchivePdfConnector for the code to see what is returned
catch e as RuntimeException
MessageBox(e.message)
end try
This is the code on the webapp that writes the file to the disc.
If Request.QueryString.BeginsWith("name=") Then // this is the name of the file
Var Name As String = DecodeURLComponent(Request.QueryString.NthField("=", 2))
// Write the file to disk
try
Var myDataFolder As FolderItem = SpecialFolder.SharedPreferences.Child("EzProService")
if not myDataFolder.Exists then
myDataFolder.CreateFolder
end if
Var b As BinaryStream = BinaryStream.Create(myDataFolder.Child(Name), True)
b.Write(Request.Body)
b.Close
Response.Status = 200
Response.Write "Ok"
catch e as IOException
Response.Status = 400
Response.Write("Can not write file")
Return True
end try
Else
Response.Status = 400
Response.Write("Invalid Request")
End If
Return True