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)