From eeb67cebd395b3dbcf866dba4d551f1901f950f3 Mon Sep 17 00:00:00 2001 From: narawat Date: Wed, 17 Jun 2026 13:09:50 +0700 Subject: [PATCH 1/2] HTTP2.0 --- Manifest.toml | 106 +++++++++++++++++++--------------------------- Project.toml | 2 +- src/msghandler.jl | 2 +- test/runtest.jl | 66 +++++++++++++++++++++++++++++ 4 files changed, 111 insertions(+), 65 deletions(-) create mode 100644 test/runtest.jl diff --git a/Manifest.toml b/Manifest.toml index d465cd7..fb7ed22 100644 --- a/Manifest.toml +++ b/Manifest.toml @@ -2,7 +2,7 @@ julia_version = "1.12.6" manifest_format = "2.0" -project_hash = "ec31595f278190cb6cfb8b50156867ebf16234d0" +project_hash = "866f6d0804412d52eacd6423616500484f0060f0" [[deps.AliasTables]] deps = ["PtrArrays", "Random"] @@ -34,11 +34,6 @@ version = "1.11.0" uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" version = "1.11.0" -[[deps.BitFlags]] -git-tree-sha1 = "0691e34b3bb8be9307330f88d1a3c3f25466c24d" -uuid = "d1d4a3ce-64b1-5f1a-9ba4-7e7e69966f35" -version = "0.1.9" - [[deps.BitIntegers]] deps = ["Random"] git-tree-sha1 = "091d591a060e43df1dd35faab3ca284925c48e46" @@ -50,6 +45,10 @@ git-tree-sha1 = "6863c5b7fc997eadcabdbaf6c5f201dc30032643" uuid = "e1450e63-4bb3-523b-b2a4-4ffa8c0fd77d" version = "1.2.2" +[[deps.CRC32c]] +uuid = "8bf52ea8-c179-5cab-976a-9e18b702a9bc" +version = "1.11.0" + [[deps.CSV]] deps = ["CodecZlib", "Dates", "FilePathsBase", "InlineStrings", "Mmap", "Parsers", "PooledArrays", "PrecompileTools", "SentinelArrays", "Tables", "Unicode", "WeakRefStrings", "WorkerUtilities"] git-tree-sha1 = "8d8e0b0f350b8e1c91420b5e64e5de774c2f0f4d" @@ -130,9 +129,9 @@ version = "1.8.2" [[deps.DataStructures]] deps = ["OrderedCollections"] -git-tree-sha1 = "e86f4a2805f7f19bec5129bc9150c38208e5dc23" +git-tree-sha1 = "6fb53a69613a0b2b68a0d12671717d307ab8b24e" uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.19.4" +version = "0.19.5" [[deps.DataValueInterfaces]] git-tree-sha1 = "bfc1187b79289637fa0ef6d4436ebdfe6905cbd6" @@ -146,9 +145,9 @@ version = "1.11.0" [[deps.Distributions]] deps = ["AliasTables", "FillArrays", "LinearAlgebra", "PDMats", "Printf", "QuadGK", "Random", "SpecialFunctions", "Statistics", "StatsAPI", "StatsBase", "StatsFuns"] -git-tree-sha1 = "e421c1938fafab0165b04dc1a9dbe2a26272952c" +git-tree-sha1 = "96f76dcd6cc75cf8eb49109123868499d413f526" uuid = "31c24e10-a181-5473-b8eb-7969acd0382f" -version = "0.25.125" +version = "0.25.126" [deps.Distributions.extensions] DistributionsChainRulesCoreExt = "ChainRulesCore" @@ -175,12 +174,6 @@ git-tree-sha1 = "c49898e8438c828577f04b92fc9368c388ac783c" uuid = "4e289a0a-7415-4d19-859d-a7e5c4648b56" version = "1.0.7" -[[deps.ExceptionUnwrapping]] -deps = ["Test"] -git-tree-sha1 = "d36f682e590a83d63d1c7dbd287573764682d12a" -uuid = "460bff9d-24e4-43bc-9d9f-a8973cb893f4" -version = "0.1.11" - [[deps.ExprTools]] git-tree-sha1 = "27415f162e6028e81c72b82ef756bf321213b6ec" uuid = "e2ba6199-217a-4e67-a87a-7c52f15ade04" @@ -191,12 +184,15 @@ deps = ["Compat", "Dates"] git-tree-sha1 = "3bab2c5aa25e7840a4b065805c0cdfc01f3068d2" uuid = "48062228-2e41-5def-b9a4-89aafe57970f" version = "0.9.24" -weakdeps = ["Mmap", "Test"] [deps.FilePathsBase.extensions] FilePathsBaseMmapExt = "Mmap" FilePathsBaseTestExt = "Test" + [deps.FilePathsBase.weakdeps] + Mmap = "a63ad114-7e13-5084-954f-fe012c677804" + Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" + [[deps.FileWatching]] uuid = "7b1f6079-737a-58dc-b8bc-7a2ca5c1b5ee" version = "1.11.0" @@ -226,17 +222,17 @@ version = "1.11.0" [[deps.GeneralUtils]] deps = ["CSV", "DataFrames", "DataStructures", "Dates", "Distributions", "JSON", "NATS", "PrettyPrinting", "Random", "Revise", "SHA", "UUIDs"] -git-tree-sha1 = "e28ca4df47d0c46d04716422bef6adb660f33dc3" +git-tree-sha1 = "8720a31344bc85ad610ae12f7e1247de22070765" repo-rev = "main" repo-url = "https://git.yiem.cc/ton/GeneralUtils" uuid = "c6c72f09-b708-4ac8-ac7c-2084d70108fe" -version = "0.3.1" +version = "0.3.2" [[deps.HTTP]] -deps = ["Base64", "CodecZlib", "ConcurrentUtilities", "Dates", "ExceptionUnwrapping", "Logging", "LoggingExtras", "MbedTLS", "NetworkOptions", "OpenSSL", "PrecompileTools", "Random", "SimpleBufferStream", "Sockets", "URIs", "UUIDs"] -git-tree-sha1 = "51059d23c8bb67911a2e6fd5130229113735fc7e" +deps = ["Base64", "CodecZlib", "Dates", "EnumX", "PrecompileTools", "Random", "Reseau", "SHA", "URIs", "UUIDs", "Zlib_jll"] +git-tree-sha1 = "196e75bcb0a53cbf80eebe6326d69a86605c34d6" uuid = "cd3eb016-35fb-5094-929b-558a96fad6f3" -version = "1.11.0" +version = "2.3.0" [[deps.HashArrayMappedTries]] git-tree-sha1 = "2eaa69a7cab70a52b9687c8bf950a5a93ec895ae" @@ -287,9 +283,9 @@ version = "1.8.0" [[deps.JSON]] deps = ["Dates", "Logging", "Parsers", "PrecompileTools", "StructUtils", "UUIDs", "Unicode"] -git-tree-sha1 = "f76f7560267b840e492180f9899b472f30b88450" +git-tree-sha1 = "c89d196f5ffb64bfbf80985b699ea913b0d2c211" uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6" -version = "1.6.0" +version = "1.6.1" weakdeps = ["ArrowTypes"] [deps.JSON.extensions] @@ -357,9 +353,9 @@ version = "1.12.0" [[deps.LogExpFunctions]] deps = ["DocStringExtensions", "IrrationalConstants", "LinearAlgebra"] -git-tree-sha1 = "13ca9e2586b89836fd20cccf56e57e2b9ae7f38f" +git-tree-sha1 = "bba2d9aa057d8f126415de240573e86a8f39d2a1" uuid = "2ab3a3ac-af41-5b50-aa03-7779005ae688" -version = "0.3.29" +version = "1.0.1" [deps.LogExpFunctions.extensions] LogExpFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -375,17 +371,11 @@ version = "0.3.29" uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" version = "1.11.0" -[[deps.LoggingExtras]] -deps = ["Dates", "Logging"] -git-tree-sha1 = "f00544d95982ea270145636c181ceda21c4e2575" -uuid = "e6f89c97-d47a-5376-807f-9c37f3926c36" -version = "1.2.0" - [[deps.LoweredCodeUtils]] deps = ["CodeTracking", "Compiler", "JuliaInterpreter"] -git-tree-sha1 = "5d4278f755440f70648d80cc6225f51e78e94094" +git-tree-sha1 = "0aad96d7b987a5600e260eec50147b254d5ff7e6" uuid = "6f1432cf-f94c-5a45-995e-cdbf5db27b0b" -version = "3.5.1" +version = "3.6.0" [[deps.Lz4_jll]] deps = ["Artifacts", "JLLWrappers", "Libdl"] @@ -456,12 +446,6 @@ deps = ["Artifacts", "Libdl"] uuid = "05823500-19ac-5b8b-9628-191a04bc5112" version = "0.8.7+0" -[[deps.OpenSSL]] -deps = ["BitFlags", "Dates", "MozillaCACerts_jll", "NetworkOptions", "OpenSSL_jll", "Sockets"] -git-tree-sha1 = "1d1aaa7d449b58415f97d2839c318b70ffb525a0" -uuid = "4d8831e6-92b7-49fb-bdf8-b643e874388c" -version = "1.6.1" - [[deps.OpenSSL_jll]] deps = ["Artifacts", "Libdl"] uuid = "458c3c95-2e84-50aa-8efc-19380b2a3a95" @@ -474,9 +458,9 @@ uuid = "efe28fd5-8261-553b-a9e1-b2916fc3738e" version = "0.5.6+0" [[deps.OrderedCollections]] -git-tree-sha1 = "05868e21324cede2207c6f0f466b4bfef6d5e7ee" +git-tree-sha1 = "94ba93778373a53bfd5a0caaf7d809c445292ff4" uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.8.1" +version = "1.8.2" [[deps.PDMats]] deps = ["LinearAlgebra", "SparseArrays", "SuiteSparse"] @@ -490,9 +474,9 @@ weakdeps = ["StatsBase"] [[deps.Parsers]] deps = ["Dates", "PrecompileTools", "UUIDs"] -git-tree-sha1 = "5d5e0a78e971354b1c7bff0655d11fdc1b0e12c8" +git-tree-sha1 = "32a4e09c5f29402573d673901778a0e03b0807b9" uuid = "69de0a69-1ddd-5017-9359-2bf0b02dc9f0" -version = "2.8.4" +version = "2.8.6" [[deps.PooledArrays]] deps = ["DataAPI", "Future"] @@ -566,11 +550,17 @@ git-tree-sha1 = "45e428421666073eab6f2da5c9d310d99bb12f9b" uuid = "189a3867-3050-52da-a836-e630ba90ab69" version = "1.2.2" +[[deps.Reseau]] +deps = ["NetworkOptions", "OpenSSL_jll", "PrecompileTools", "Random", "SHA"] +git-tree-sha1 = "0eab6d95ed40c2ef3992255c1c71e4f9748932b5" +uuid = "802f3686-a58f-41ce-bb0c-3c43c75bba36" +version = "1.3.1" + [[deps.Revise]] -deps = ["CodeTracking", "FileWatching", "InteractiveUtils", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Preferences", "REPL", "UUIDs"] -git-tree-sha1 = "d9383b639663d8220ac9c523927e38bc21cad16a" +deps = ["CRC32c", "CodeTracking", "FileWatching", "InteractiveUtils", "JuliaInterpreter", "LibGit2", "LoweredCodeUtils", "OrderedCollections", "Preferences", "REPL", "UUIDs"] +git-tree-sha1 = "27e3ee13fc8739a59b380d6163d6a82f52c03bd7" uuid = "295af30f-e4ad-537b-8983-00126c2a3abe" -version = "3.14.3" +version = "3.15.1" [deps.Revise.extensions] DistributedExt = "Distributed" @@ -616,11 +606,6 @@ version = "1.4.10" uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" version = "1.11.0" -[[deps.SimpleBufferStream]] -git-tree-sha1 = "f305871d2f381d21527c770d4788c06c097c9bc1" -uuid = "777ac1f9-54b0-4bf8-805c-2214025038e7" -version = "1.2.0" - [[deps.Sockets]] uuid = "6462fe0b-24de-5631-8697-dd941f90decc" version = "1.11.0" @@ -644,9 +629,9 @@ version = "1.12.0" [[deps.SpecialFunctions]] deps = ["IrrationalConstants", "LogExpFunctions", "OpenLibm_jll", "OpenSpecFun_jll"] -git-tree-sha1 = "2700b235561b0335d5bef7097a111dc513b8655e" +git-tree-sha1 = "6547cbdd8ce32efba0d21c5a40fa96d1a3548f9f" uuid = "276daf66-3868-5448-9aa4-cd146d93841b" -version = "2.7.2" +version = "2.8.0" [deps.SpecialFunctions.extensions] SpecialFunctionsChainRulesCoreExt = "ChainRulesCore" @@ -672,15 +657,15 @@ version = "1.8.0" [[deps.StatsBase]] deps = ["AliasTables", "DataAPI", "DataStructures", "IrrationalConstants", "LinearAlgebra", "LogExpFunctions", "Missings", "Printf", "Random", "SortingAlgorithms", "SparseArrays", "Statistics", "StatsAPI"] -git-tree-sha1 = "aceda6f4e598d331548e04cc6b2124a6148138e3" +git-tree-sha1 = "c6f18e5a52a176a383f6f6c635e0f81feed1d6d4" uuid = "2913bbd2-ae8a-5f71-8c99-4fb6c76f3a91" -version = "0.34.10" +version = "0.34.11" [[deps.StatsFuns]] deps = ["HypergeometricFunctions", "IrrationalConstants", "LogExpFunctions", "Reexport", "Rmath", "SpecialFunctions"] -git-tree-sha1 = "91f091a8716a6bb38417a6e6f274602a19aaa685" +git-tree-sha1 = "3f4e1d24289cd974e089c617b1472311a2b1feab" uuid = "4c63d2b9-4356-54db-8cca-17b64c39e42c" -version = "1.5.2" +version = "2.1.0" [deps.StatsFuns.extensions] StatsFunsChainRulesCoreExt = "ChainRulesCore" @@ -759,11 +744,6 @@ git-tree-sha1 = "f2c1efbc8f3a609aadf318094f8fc5204bdaf344" uuid = "bd369af6-aec1-5ad0-b16a-f7cc5008161c" version = "1.12.1" -[[deps.Test]] -deps = ["InteractiveUtils", "Logging", "Random", "Serialization"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" -version = "1.11.0" - [[deps.TimeZones]] deps = ["Artifacts", "Dates", "Downloads", "InlineStrings", "Mocking", "Printf", "Scratch", "TZJData", "Unicode", "p7zip_jll"] git-tree-sha1 = "d422301b2a1e294e3e4214061e44f338cafe18a2" diff --git a/Project.toml b/Project.toml index 749e644..febc4f5 100644 --- a/Project.toml +++ b/Project.toml @@ -19,5 +19,5 @@ UUIDs = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" [compat] Base64 = "1.11.0" Dates = "1.11.0" -GeneralUtils = "0.3 - 0.4" +GeneralUtils = "0.3.2" JSON = "1.4.0" diff --git a/src/msghandler.jl b/src/msghandler.jl index 400180f..7694d33 100644 --- a/src/msghandler.jl +++ b/src/msghandler.jl @@ -1048,7 +1048,7 @@ function plik_oneshot_upload(file_server_url::String, dataname::String, data::Ve 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; body_is_form=false) + http_response = HTTP.request("POST", url_getUploadID, headers, body) response_json = JSON.parse(http_response.body) uploadid = response_json["id"] uploadtoken = response_json["uploadToken"] diff --git a/test/runtest.jl b/test/runtest.jl new file mode 100644 index 0000000..934e187 --- /dev/null +++ b/test/runtest.jl @@ -0,0 +1,66 @@ + +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) + + + + + + + + + + + + + + + + From 8de8e8b2f002f802c24a65eee93dc3d17857edfa Mon Sep 17 00:00:00 2001 From: narawat Date: Wed, 17 Jun 2026 13:12:17 +0700 Subject: [PATCH 2/2] update http2.o --- src/msghandler.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/msghandler.jl b/src/msghandler.jl index 7694d33..6ac75fa 100644 --- a/src/msghandler.jl +++ b/src/msghandler.jl @@ -1125,7 +1125,7 @@ function plik_oneshot_upload(file_server_url::String, filepath::String) 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; body_is_form=false) + http_response = HTTP.request("POST", url_getUploadID, headers, body) response_json = JSON.parse(http_response.body) uploadid = response_json["id"]