[{"data":1,"prerenderedAt":400},["ShallowReactive",2],{"nav-docs":3,"nav-api":60,"api-upload":89},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,32,36,40,44,48,52,56],{"title":10,"path":6,"stem":11},"Installation","docs\u002Findex",{"title":13,"path":14,"stem":15},"Sending files","\u002Fdocs\u002Fsending-files","docs\u002F02.sending-files",{"title":17,"path":18,"stem":19},"Receiving files","\u002Fdocs\u002Freceiving-files","docs\u002F03.receiving-files",{"title":21,"path":22,"stem":23},"Passwords, galleries and backgrounds","\u002Fdocs\u002Fshare-options","docs\u002F04.share-options",{"title":25,"path":26,"stem":27},"Expiry and deletion","\u002Fdocs\u002Fexpiry","docs\u002F05.expiry",{"title":29,"path":30,"stem":31},"Users","\u002Fdocs\u002Fusers","docs\u002F06.users",{"title":33,"path":34,"stem":35},"Configuration","\u002Fdocs\u002Fconfiguration","docs\u002F07.configuration",{"title":37,"path":38,"stem":39},"Colours and branding","\u002Fdocs\u002Fcolors","docs\u002F08.colors",{"title":41,"path":42,"stem":43},"Docker","\u002Fdocs\u002Fdocker","docs\u002F09.docker",{"title":45,"path":46,"stem":47},"API keys","\u002Fdocs\u002Fapi-keys","docs\u002F10.api-keys",{"title":49,"path":50,"stem":51},"MCP server","\u002Fdocs\u002Fmcp-server","docs\u002F11.mcp-server",{"title":53,"path":54,"stem":55},"Troubleshooting","\u002Fdocs\u002Ftroubleshooting","docs\u002F12.troubleshooting",{"title":57,"path":58,"stem":59},"Contributing","\u002Fdocs\u002Fcontributing","docs\u002F13.contributing",[61],{"title":62,"path":63,"stem":64,"children":65},"Api","\u002Fapi","api",[66,69,73,77,81,85],{"title":67,"path":63,"stem":68},"REST API","api\u002Findex",{"title":70,"path":71,"stem":72},"Transfers","\u002Fapi\u002Ftransfers","api\u002F02.transfers",{"title":74,"path":75,"stem":76},"Uploading files","\u002Fapi\u002Fupload","api\u002F03.upload",{"title":78,"path":79,"stem":80},"Sending a transfer","\u002Fapi\u002Fsend","api\u002F04.send",{"title":82,"path":83,"stem":84},"Downloading","\u002Fapi\u002Fdownload","api\u002F05.download",{"title":86,"path":87,"stem":88},"Recipients","\u002Fapi\u002Frecipients","api\u002F06.recipients",{"id":90,"title":74,"body":91,"description":104,"extension":395,"meta":396,"navigation":397,"path":75,"seo":398,"stem":76,"__hash__":399},"api\u002Fapi\u002F03.upload.md",{"type":92,"value":93,"toc":389},"minimark",[94,98,122,130,195,278,283,286,294,298,347,350,354,365,371,375,382,385],[95,96,74],"h1",{"id":97},"uploading-files",[99,100,105],"pre",{"className":101,"code":102,"language":103,"meta":104,"style":104},"language-http shiki shiki-themes github-light github-dark","POST \u002Fapi\u002Ftransfers\u002F:id\u002Ffiles\nContent-Type: multipart\u002Fform-data\n","http","",[106,107,108,116],"code",{"__ignoreMap":104},[109,110,113],"span",{"class":111,"line":112},"line",1,[109,114,115],{},"POST \u002Fapi\u002Ftransfers\u002F:id\u002Ffiles\n",[109,117,119],{"class":111,"line":118},2,[109,120,121],{},"Content-Type: multipart\u002Fform-data\n",[123,124,125,126,129],"p",{},"One file per request, sent as a ",[106,127,128],{},"file"," field:",[99,131,135],{"className":132,"code":133,"language":134,"meta":104,"style":104},"language-bash shiki shiki-themes github-light github-dark","curl -X POST \"$BASE\u002Fapi\u002Ftransfers\u002F$ID\u002Ffiles\" \\\n  -H \"x-api-key: $KEY\" \\\n  -F \"file=@build.zip\"\n","bash",[106,136,137,170,186],{"__ignoreMap":104},[109,138,139,143,147,151,154,158,161,164,167],{"class":111,"line":112},[109,140,142],{"class":141},"sScJk","curl",[109,144,146],{"class":145},"sj4cs"," -X",[109,148,150],{"class":149},"sZZnC"," POST",[109,152,153],{"class":149}," \"",[109,155,157],{"class":156},"sVt8B","$BASE",[109,159,160],{"class":149},"\u002Fapi\u002Ftransfers\u002F",[109,162,163],{"class":156},"$ID",[109,165,166],{"class":149},"\u002Ffiles\"",[109,168,169],{"class":145}," \\\n",[109,171,172,175,178,181,184],{"class":111,"line":118},[109,173,174],{"class":145},"  -H",[109,176,177],{"class":149}," \"x-api-key: ",[109,179,180],{"class":156},"$KEY",[109,182,183],{"class":149},"\"",[109,185,169],{"class":145},[109,187,189,192],{"class":111,"line":188},3,[109,190,191],{"class":145},"  -F",[109,193,194],{"class":149}," \"file=@build.zip\"\n",[99,196,200],{"className":197,"code":198,"language":199,"meta":104,"style":104},"language-json shiki shiki-themes github-light github-dark","{\n  \"data\": {\n    \"id\": 41,\n    \"filename\": \"build.zip\",\n    \"mimeType\": \"application\u002Fzip\",\n    \"size\": 48213004\n  }\n}\n","json",[106,201,202,207,215,229,242,255,266,272],{"__ignoreMap":104},[109,203,204],{"class":111,"line":112},[109,205,206],{"class":156},"{\n",[109,208,209,212],{"class":111,"line":118},[109,210,211],{"class":145},"  \"data\"",[109,213,214],{"class":156},": {\n",[109,216,217,220,223,226],{"class":111,"line":188},[109,218,219],{"class":145},"    \"id\"",[109,221,222],{"class":156},": ",[109,224,225],{"class":145},"41",[109,227,228],{"class":156},",\n",[109,230,232,235,237,240],{"class":111,"line":231},4,[109,233,234],{"class":145},"    \"filename\"",[109,236,222],{"class":156},[109,238,239],{"class":149},"\"build.zip\"",[109,241,228],{"class":156},[109,243,245,248,250,253],{"class":111,"line":244},5,[109,246,247],{"class":145},"    \"mimeType\"",[109,249,222],{"class":156},[109,251,252],{"class":149},"\"application\u002Fzip\"",[109,254,228],{"class":156},[109,256,258,261,263],{"class":111,"line":257},6,[109,259,260],{"class":145},"    \"size\"",[109,262,222],{"class":156},[109,264,265],{"class":145},"48213004\n",[109,267,269],{"class":111,"line":268},7,[109,270,271],{"class":156},"  }\n",[109,273,275],{"class":111,"line":274},8,[109,276,277],{"class":156},"}\n",[279,280,282],"h2",{"id":281},"why-one-file-per-request","Why one file per request",[123,284,285],{},"The body is piped straight to disk rather than read into memory. For a service\nwhose job is multi-gigabyte files, that is the difference between working and\nrunning the process out of memory on the first real transfer.",[123,287,288,289,293],{},"One file per request also means the client gets true per-file progress, a\nfailure costs only that file, and the size limit can be enforced ",[290,291,292],"strong",{},"mid-stream","\nrather than after everything has already arrived.",[279,295,297],{"id":296},"limits","Limits",[299,300,301,317],"table",{},[302,303,304],"thead",{},[305,306,307,311,314],"tr",{},[308,309,310],"th",{},"Limit",[308,312,313],{},"Default",[308,315,316],{},"Variable",[318,319,320,334],"tbody",{},[305,321,322,326,329],{},[323,324,325],"td",{},"Per file",[323,327,328],{},"2048 MB",[323,330,331],{},[106,332,333],{},"NUXT_MAX_FILE_SIZE_MB",[305,335,336,339,342],{},[323,337,338],{},"Files per transfer",[323,340,341],{},"50",[323,343,344],{},[106,345,346],{},"NUXT_MAX_FILES_PER_TRANSFER",[123,348,349],{},"Exceeding the size limit aborts the stream and removes the partial file, so\nnothing is left occupying disk under a row that was never written.",[279,351,353],{"id":352},"only-into-a-draft","Only into a draft",[123,355,356,357,360,361,364],{},"A transfer accepts files only while its status is ",[106,358,359],{},"draft",". Once sent, the file\nlist is what the recipient was told they are getting, so a further upload\nanswers ",[106,362,363],{},"409 TRANSFER_ALREADY_SENT",".",[123,366,367,368,364],{},"Someone else's transfer answers ",[106,369,370],{},"404",[279,372,374],{"id":373},"filenames","Filenames",[123,376,377,378,381],{},"The name you send is stored in the database and reattached in the\n",[106,379,380],{},"Content-Disposition"," header on the way out. On disk the file gets a random\nname.",[123,383,384],{},"That removes path traversal, reserved Windows names, unicode normalisation\ncollisions and case-insensitive overwrites as a class of problem, rather than\ntrying to sanitise them one by one.",[386,387,388],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":104,"searchDepth":118,"depth":118,"links":390},[391,392,393,394],{"id":281,"depth":118,"text":282},{"id":296,"depth":118,"text":297},{"id":352,"depth":118,"text":353},{"id":373,"depth":118,"text":374},"md",{},true,{"title":74,"description":104},"ELD4B5C2CTbXlW8S3FFWZhNjJPjFZmdRtXQqChAMQPk",1790104591923]