Upload pdf from Desktop app to Web App

Does anyone have some working example code to upload a pdf file from a xojo desktop app to a xojo webapp. I have tried the Curl example from MBS but can not get it work. My app is working if I send Json to the webapp using URLConnection. But now I need to send some small pdf files. I am using Xojo version 2020 R2.1 and I did check, the Curl plugin is loading. The sending app just locks up and never sends anything when using the MBS example. Thanks

Would it work to read the pdf file, Base64 it and stick it in a json message?

I think that might work if the pdf is a small file, and they usually are. I am creating the pdf myself using pdfdocument. Then I save the pdf and send a copy via email attachment to my customer. I then want to archive the pdf on the server. The app that sends the file is a desktop app on a laptop that is mobile.
I just need some code to get started on this file upload. I guess that I can use PDFfolderItem.Base64Data but do I need to append anything else? Like the application type?
Thanks

This might help.

Web Code (HandleURL)

Function HandleURL(Request As WebRequest, Response As WebResponse) Handles HandleURL as Boolean
  If Request.Path = "" Then
    Return False ' This is not a special URL request, so let the framework handle it
  End If
  
  // The URL will be /File?Name=<URLEncodedfilename>
  // the content will be binary data
  // NB This is only suitable for small files as the entire request will be uploaded into memory before being processed.
  
  If Request.Path <> "file" Then
    Return False ' A 404 response will be sent from the framework
  End If
  
  If Request.QueryString.BeginsWith("name=") Then
    Var Name As String = DecodeURLComponent(Request.QueryString.NthField("=", 2))
    
    // Write the file to disk
    Var b As BinaryStream = BinaryStream.Create(SpecialFolder.Temporary.Child(Name))
    b.Write(Request.Body)
    b.Close
    
    Response.Status = 200
    Response.Write "Ok"
  Else
    Response.Status = 400
    Response.Write("Invalid Request")
  End If
  
  Return True
End Function

And the desktop code (Action event of a button) Uploader is a URLConnection dropped on the window

Sub Action() Handles Action
  Var d As New OpenFileDialog
  Var f As FolderItem = d.ShowModal()
  If f = Nil Then
    MessageBox("File not selected")
    Return
  End If
  
  Var b As BinaryStream = BinaryStream.Open(f)
  
  Var url As String = "HTTP://127.0.0.1:8080/file?Name=" + EncodeURLComponent(f.Name)
  
  Uploader.SetRequestContent(b.Read(b.Length), "application/octet-stream")
  Uploader.Send("POST", url)
  
  
End Sub
2 Likes

Thanks Wayne. I think that is what I needed. I will give it try tomorrow.

Wayne’s solution is working great. I also tried a larger pdf up to 1 mb and no problems.
Thanks again.

3 Likes
Forum for Xojo Programming Language and IDE. Copyright © 2021 Xojo, Inc.