網(wǎng)管小賈 / sysadm.cc
問(wèn)一個(gè)問(wèn)題,怎么將文件傳給別人?
這還不簡(jiǎn)單,用微信啊!不行用 QQ 啊!再不行那郵件也可以啊!
好了好了,要是再這么說(shuō)就暴露水平了,哈哈!
其實(shí)文件傳輸完全可以變得更優(yōu)雅更酷炫的哦!
這次我就要給小伙伴們介紹一款文件傳輸分享服務(wù) transfer.sh 。
它由 golang 開(kāi)發(fā),支持多個(gè)操作系統(tǒng)平臺(tái),可以帶給我們?nèi)碌奈募鬏旙w驗(yàn)的解決方案。
她的特點(diǎn)是,簡(jiǎn)單、快速,通過(guò)命令行的方式傳輸文件,并且可以提供加密保護(hù)、無(wú)限上傳下載、鏈接式分享等諸多牛叉功能。
花式上傳正是 transfer.sh 最先引起我興趣的特點(diǎn)之一,還沒(méi)有接觸過(guò) transfer.sh 的小伙伴建議先參考閱讀一下以前的文章。
前文參考:《僅一條命令實(shí)現(xiàn)文件傳輸,真實(shí)上演在公司 Ctrl+C 在家 Ctrl+V(上)》
文章鏈接:https://www.sysadm.cc/index.php/xitongyunwei/896-file-transfer-with-only-one-command-ctrl-c-in-company-and-ctrl-v-at-home-1
前文參考:《僅一條命令實(shí)現(xiàn)文件傳輸,真實(shí)上演在公司 Ctrl+C 在家 Ctrl+V(下)》
文章鏈接:https://www.sysadm.cc/index.php/xitongyunwei/897-file-transfer-with-only-one-command-ctrl-c-in-company-and-ctrl-v-at-home-2
好了,transfer.sh 很好玩,但最最最重要的是,它還可以作為單獨(dú)的實(shí)例為我們提供我們自己的文件服務(wù)系統(tǒng)。
意思就是說(shuō),我們可以用她來(lái)建立自己的文件分享系統(tǒng),這樣我們就可以更加安全更加自由地與他人傳遞文件了。
本文將重點(diǎn)給大家分享如何搭建一個(gè)屬于自己的 transfer.sh ,在此期間我再穿插一些使用的方式方法,以加深對(duì) transfer.sh 服務(wù)運(yùn)用的理解。
由于 transfer.sh 支持跨平臺(tái),因此我們就用 Windows 來(lái)做演示,這樣讓小伙伴們也更加容易理解,至于 Linux 或 BSD 甚至是安卓等系統(tǒng)基本上是大同小異的。
打開(kāi) Github 上的項(xiàng)目頁(yè)面,找到 Release 并下載相應(yīng)的安裝包。
https://www.github.com/dutchcoders/transfer.sh/
如果你的網(wǎng)速不錯(cuò),也可以直接下載 exe 文件,我們下載的壓縮包解壓后其實(shí)也是得到一樣的 exe 文件。
下載完成后,將其中的 transfersh-v1.3.0-windows-amd64.exe 這個(gè)文件釋放出來(lái),放到一個(gè)指定的文件夾中,比如我這邊是 C:\sysadm 。
我們打開(kāi)命令提示符,輸入以下命令可以得到幫助信息。
C:\sysadm\transfersh-v1.3.0-windows-amd64.exe -h
這些幫助信息作為參考,等一會(huì)兒就會(huì)用到,不用擔(dān)心這么多的參數(shù),實(shí)際使用會(huì)根據(jù)應(yīng)用場(chǎng)景而并不需要涉及太多。
另外如果你覺(jué)得這個(gè)文件名太長(zhǎng)了點(diǎn),那你可以將它重命名為 transfersh.exe 這樣的較短的名字。
當(dāng)然,作為演示我后面都還會(huì)沿用原始的較長(zhǎng)的文件名。
在啟動(dòng)服務(wù)之前,我們需要先建立一個(gè)文件夾,用于映射內(nèi)部服務(wù)的暫存目錄。
比如,在 C 盤(pán)根目錄下新建一個(gè)文件夾 tmp 。
mkdir C:\tmp
然后按照以下參數(shù)啟動(dòng)服務(wù), ^ 用于書(shū)寫(xiě)代碼時(shí)不中斷命令的換行,你也可以將 ^ 去掉而寫(xiě)成一行。
transfersh-v1.3.0-windows-amd64.exe ^
--provider=local ^
--listener :80 ^
--temp-path=/tmp/ ^
--basedir=C:\tmp\
參數(shù)解釋如下:
注意,在命令執(zhí)行前請(qǐng)務(wù)必確保服務(wù)器端口已在防火墻中開(kāi)放。
好了,命令執(zhí)行后服務(wù)就開(kāi)始運(yùn)行了。
這個(gè)時(shí)候,我們打開(kāi)瀏覽器,在地址欄內(nèi)輸入 http://server_ip 后回車。
我們會(huì)驚喜地發(fā)現(xiàn),我們自己的 transfer.sh 服務(wù)器已經(jīng)在正常運(yùn)行中了。
我們可以看到,雖然與官方首頁(yè)長(zhǎng)得挺像,但里面的命令參數(shù)或鏈接都變成了我們自己服務(wù)器的IP地址了。
當(dāng)然如果我們使用域名方式訪問(wèn)服務(wù)器也是可以的,只要保證能夠正常解析域名即可,那樣的話我們看到的頁(yè)面上就是服務(wù)器的域名了。
接下來(lái)我們就試一下,看看能不能拿來(lái)傳輸文件。
假定當(dāng)前目錄中有一個(gè)文件 hello.txt ,輸入以下命令,我們將這個(gè)文件上傳到服務(wù)器。
curl --upload-file ./hello.txt http://server_ip/hello.txt
從返回的結(jié)果中我們得到了一個(gè)下載鏈接,比如:
http://server_ip/5liLmu/hello.txt
我們回到服務(wù)端來(lái)看看有沒(méi)有什么變化。
嘿,果不其然,在服務(wù)端指定的本地文件夾 C:\tmp 中新生成了一個(gè) 5liLmu 的文件夾。
并且這個(gè)文件夾的名字與我們剛才上傳時(shí)生成的隨機(jī)字符串一致。
好,我們?cè)賮?lái)看看文件上傳之后到底是怎么存放的。
一共有兩個(gè)文件,一個(gè)就是我們上傳的文件,另一個(gè)是以 metadata 為后綴的元數(shù)據(jù)文件。
讓我們看看這個(gè) metadata 里面到底是什么東東。
用記事本打開(kāi)它,可以看到如下的內(nèi)容。
{
"ContentType":"text/plain; charset=utf-8",
"Downloads":0,
"MaxDownloads":-1,
"MaxDate":"0001-01-01T00:00:00Z",
"DeletionToken":"7vEDa9tajs8U"
}
這個(gè)格式有點(diǎn)眼熟啊,感覺(jué)就是個(gè) Json 數(shù)據(jù)嘛!
當(dāng)然了,實(shí)際上以上內(nèi)容是寫(xiě)在一行的,為了大家查看方便直觀稍稍換了行。
這個(gè) Json 就是以 key-value 的形式保存的數(shù)據(jù)信息,那么具體各個(gè) key 的意思我想小伙伴們大概也能猜出個(gè)一二來(lái)吧。
比如 MaxDonloads 它的值是 -1 ,表示無(wú)限下載。
這里有一個(gè)比較有趣的 key ,就是那個(gè) DeletionToken ,后面跟著一串奇怪的字符。
這個(gè)又是什么意思呢?
從字面意思我們也能猜出個(gè)八九不離十哈,就是刪除令牌??!
那么它正是用于刪除我們上傳文件的。
其實(shí)我們通過(guò)在命令中追加 -H "X-Url-Delete" 參數(shù)即可從客戶端獲取刪除令牌。
# -I 用于查看返回信息
curl -I -H "X-Url-Delete" --upload-file ./hello.txt http://server_ip/hello.txt
從圖中的返回信息中我們就可以看到有那么一行帶有刪除令牌的信息。
沒(méi)錯(cuò),那最后一串奇怪的字符就是刪除令牌了。
X-Url-Delete: http://server_ip/0czFd5/hello.txt/NcPETCcGExW2
然后,怎么刪?
很簡(jiǎn)單,拿剛才的令牌信息,照搬下面的命令就行了。
curl -X DELETE http://server_ip/0czFd5/hello.txt/NcPETCcGExW2
如果加上參數(shù) -I 則可以查看返回信息。
當(dāng)然了,即便你不主動(dòng)刪除文件,它也會(huì)在 336 小時(shí)后自動(dòng)刪除。
OK,成功刪除文件!
我們回到服務(wù)端也能看到文件已經(jīng)被成功刪除了!
即使打條命令就可以刪除文件,官方在新版中也新開(kāi)發(fā)了提供網(wǎng)頁(yè)界面刪除文件的功能。
如圖我們只要先點(diǎn)擊 delete 那個(gè)按鈕,然后再輸入刪除令牌 DeletionToken 并按下確認(rèn) confirm 按鈕就可以刪除文件了。
到目前為止,我們已經(jīng)可以搭建一個(gè)屬于我們自己的 transfer.sh 文件傳輸服務(wù)了。
雖然基本的上傳下載分享文件的功能已經(jīng)初具規(guī)模,但是如果你想讓她再?gòu)?qiáng)大一些、應(yīng)用范圍再?gòu)V泛一些,那么可以接著關(guān)注下一篇文章。
在下一篇文章中,我將為小伙伴們分享介紹一些關(guān)于 transfer.sh 應(yīng)用范圍更加廣闊的使用方法,包括如何以 Docker 容器形式運(yùn)行服務(wù)、如何結(jié)合第三方云存儲(chǔ)以及其他一些很有趣的內(nèi)容。
請(qǐng)大家不要著急,我將馬不停蹄、加快趕制,就請(qǐng)各位拭目以待吧!
網(wǎng)管小賈 / sysadm.cc
]]>