[{"data":1,"prerenderedAt":172},["ShallowReactive",2],{"portfolio-updownserver":3},{"id":4,"title":5,"body":6,"category":150,"cover":151,"date":152,"description":153,"extension":154,"featured":155,"links":156,"meta":158,"navigation":159,"path":160,"seo":161,"status":162,"stem":163,"tags":164,"__hash__":171},"portfolio\u002Fportfolio\u002Fupdownserver.md","updownserver",{"type":7,"value":8,"toc":144},"minimark",[9,14,27,30,33,84,87,128,131,134,137,140],[10,11,13],"h2",{"id":12},"為什麼做這個","為什麼做這個？",[15,16,17,18,22,23,26],"p",{},"很久以前在公司分享過一個技巧：只要有 Python，一行指令就能在電腦上起一個 HTTP server 傳檔案，不需要安裝任何東西。後來有類似需求時，發現社群上有個 ",[19,20,21],"code",{},"uploadserver"," 套件，在原本的 ",[19,24,25],{},"http.server"," 基礎上加了上傳功能。",[15,28,29],{},"不過它的介面偏陽春——上傳和下載是分開的、沒有資料夾管理、沒有行動裝置支援。既然需求在這裡，就基於它再做多一點。",[10,31,32],{"id":32},"功能",[34,35,36,44,50,56,62,68,78],"ul",{},[37,38,39,43],"li",{},[40,41,42],"strong",{},"統一介面","：上傳區、檔案列表、下載、刪除，全部在同一頁",[37,45,46,49],{},[40,47,48],{},"QR Code","：啟動時印出 QR Code，手機掃一下就連上，局域網傳檔超方便",[37,51,52,55],{},[40,53,54],{},"安全機制","：預設 5 分鐘自動關機（避免忘記關）；未認證連線限制管理操作",[37,57,58,61],{},[40,59,60],{},"Basic Auth","：支援下載認證、上傳認證各自獨立設定",[37,63,64,67],{},[40,65,66],{},"HTTPS + mTLS","：需要加密時可以帶憑證啟動",[37,69,70,73,74,77],{},[40,71,72],{},"Docker 支援","：一行 ",[19,75,76],{},"docker run"," 分享當前目錄",[37,79,80,83],{},[40,81,82],{},"零依賴核心","：全用 Python 標準函式庫，QR Code 為可選依賴",[10,85,86],{"id":86},"使用方式",[88,89,94],"pre",{"className":90,"code":91,"language":92,"meta":93,"style":93},"language-bash shiki shiki-themes github-light github-dark","pip install updownserver[qr]\npython3 -m updownserver --qr\n","bash","",[19,95,96,112],{"__ignoreMap":93},[97,98,101,105,109],"span",{"class":99,"line":100},"line",1,[97,102,104],{"class":103},"sScJk","pip",[97,106,108],{"class":107},"sZZnC"," install",[97,110,111],{"class":107}," updownserver[qr]\n",[97,113,115,118,122,125],{"class":99,"line":114},2,[97,116,117],{"class":103},"python3",[97,119,121],{"class":120},"sj4cs"," -m",[97,123,124],{"class":107}," updownserver",[97,126,127],{"class":120}," --qr\n",[15,129,130],{},"啟動後用手機掃 QR Code，直接拖曳上傳或點擊下載。",[10,132,133],{"id":133},"心得",[15,135,136],{},"這個工具的核心價值是「零門檻」——對方不需要安裝任何東西，你這端也只需要一行指令。傳完檔案、時間到自動關閉，乾淨俐落。",[15,138,139],{},"上架 PyPI 是第一次，過程比想像中簡單。更有趣的是看到下載數字慢慢增加——代表有人在用。雖然不是什麼大型開源專案，但解決了一個真實的小問題，有人願意下載使用，這樣就夠了。",[141,142,143],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":93,"searchDepth":114,"depth":114,"links":145},[146,147,148,149],{"id":12,"depth":114,"text":13},{"id":32,"depth":114,"text":32},{"id":86,"depth":114,"text":86},{"id":133,"depth":114,"text":133},"cli",null,"2025-01-01T00:00:00.000Z","一行指令啟動的輕量級 HTTP 檔案傳輸工具。整合上傳、下載、資料夾管理於單一介面，支援 QR Code、HTTPS、Docker，已上架 PyPI。","md",false,{"github":157},"https:\u002F\u002Fgithub.com\u002Fharry18456\u002Fupdownserver",{},true,"\u002Fportfolio\u002Fupdownserver",{"title":5,"description":153},"active","portfolio\u002Fupdownserver",[165,166,167,168,169,170],"Python","CLI","HTTP Server","PyPI","Docker","零依賴","yY7_3D3Zltl9SRxbXAZ-TbNnIfyCMA12MHLOLHRSz0s",1774434884713]