
function plik_oneshot_upload(file_server_url::String, dataname::String, data::Vector{UInt8})

  # ----------------------------------------- get upload id ---------------------------------------- #
  # Equivalent curl command:  curl -X POST -d '{ "OneShot" : true }' http://localhost:8080/upload
  url_getUploadID = "$file_server_url/upload" # URL to get upload ID
  headers = ["Content-Type" => "application/json"]
  body = """{ "OneShot" : true }"""
  http_response = HTTP.request("POST", url_getUploadID, headers, body)
  response_json = JSON.parse(http_response.body)
  uploadid = response_json["id"]
  uploadtoken = response_json["uploadToken"]

  # ------------------------------------------ upload file ----------------------------------------- #
  # Equivalent curl command:  curl -X POST --header "X-UploadToken: UPLOAD_TOKEN" -F "file=@PATH_TO_FILE" http://localhost:8080/file/UPLOAD_ID
  file_multipart = HTTP.Multipart(dataname, IOBuffer(data), "application/octet-stream") # Plik won't accept raw bytes upload
  url_upload = "$file_server_url/file/$uploadid"
  headers = ["X-UploadToken" => uploadtoken]

  # Create the multipart form data
  form = HTTP.Form(Dict(
    "file" => file_multipart
  ))

  # Execute the POST request
  http_response = nothing
  try
    http_response = HTTP.post(url_upload, headers, form)
  catch e
    @error "Request failed" exception=e
  end
  response_json = JSON.parse(http_response.body)
  fileid = response_json["id"]

  # url of the uploaded data e.g. "http://192.168.1.20:8080/file/3F62E/4AgGT/test.zip"
  url = "$file_server_url/file/$uploadid/$fileid/$dataname"

  return Dict("status" => http_response.status, "uploadid" => uploadid, "fileid" => fileid, "url" => url)
end


using HTTP, JSON

file_server_url = "https://fileserver.yiem.cc"
dataname = "test.txt"
data = Vector{UInt8}("hello world")

# Upload to local plik server
result = plik_oneshot_upload(file_server_url, dataname, data)
println(result)
















