Golang vs PHP 之文件服務(wù)器

前面的話

作者為golang腦殘粉喷楣,本篇內(nèi)容可能會(huì)引起phper不適汰聋,請(qǐng)慎讀!

前兩天有同事遇到一個(gè)問題徙瓶,需要一個(gè)能支持上傳毛雇、下載功能的HTTP服務(wù)器做一個(gè)數(shù)據(jù)中心。我剛好弄過侦镇,于是答應(yīng)幫他搭一個(gè)灵疮。

HTTP服務(wù)器,首先想到的就是PHP + nginx壳繁。于是開擼震捣,先寫一個(gè)PHP的上傳

<?php
    if ($_FILES["file"]["error"] > 0)
    {
        echo "錯(cuò)誤:: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " 文件已經(jīng)存在。 ";
        }
        else
        {
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "文件存儲(chǔ)在: " . "upload/" . $_FILES["file"]["name"];
        }
    }
?>

好了闹炉,寫好了蒿赢!需求完成了!測(cè)試一下把渣触!

于是開始第一次測(cè)試羡棵,結(jié)果:失敗嗅钻!

原因是PHP的upload_max_filesize只有2M皂冰,上傳的文件大小超過限制了。
修改了一下php.ini配置养篓,再次測(cè)試可以上傳了

那么部署到服務(wù)器上去把秃流。服務(wù)器上有一個(gè)openresty(nginx的系列的web服務(wù)器),把upload.php文件丟里面柳弄,然后重啟服務(wù)剔应。好了,又可以測(cè)試一下了语御!

于是第二次測(cè)試,結(jié)果:失斚帧应闯!

原因是,openresty默認(rèn)沒開php解析挂捻,要改下配置碉纺。把nginx.conf里的php解析打開一下。重啟nginx,然后再測(cè)試一下吧~

于是骨田,第三次測(cè)試耿导,還是失敗态贤!

原來舱呻。。這臺(tái)機(jī)器上悠汽,雖然有nginx箱吕,但是沒有安裝PHP!J脸濉茬高! 想到還要去外網(wǎng)下載PHP,然后還要選版本假抄,然后回來安裝還要配置環(huán)境變量以及openresty關(guān)聯(lián)php的配置后怎栽。。

算了宿饱,再見吧 PHP熏瞄!

輪到Go語言上場(chǎng)的時(shí)候了!刑棵!

在golang的世界里1行代碼就能搞定一個(gè)文件服務(wù)器

package main

import (
    "log"
    "net/http"
)

func main() {
    log.Fatal(http.ListenAndServe(":8038", http.FileServer(http.Dir("./"))))
}

就這樣巴刻,你就可以在本機(jī)訪問8038端口去下載指定路徑的文件了!不需要依賴nginx或者其他任何web服務(wù)器

包含上傳蛉签、下載功能的FileServer.go全部代碼如下

package main

import (
    "fmt"
    "io"
    "log"
    "net/http"
    "os"
)

const (
    uploadPath = "./Files/"
)

func main() {
    http.HandleFunc("/upload", uploadHandle)
    fs := http.FileServer(http.Dir(uploadPath))
    http.Handle("/Files/", http.StripPrefix("/Files", fs))
    log.Fatal(http.ListenAndServe(":8037", nil))
}

func uploadHandle(w http.ResponseWriter, r *http.Request) {
    file, head, err := r.FormFile("file")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    filePath := uploadPath + head.Filename
    fW, err := os.Create(filePath)
    if err != nil {
        fmt.Println("文件創(chuàng)建失敗")
        return
    }
    defer fW.Close()
    _, err = io.Copy(fW, file)
    if err != nil {
        fmt.Println("文件保存失敗")
        return
    }
    io.WriteString(w, "save to "+filePath)
}

如何部署

go是靜態(tài)編譯型語言胡陪,直接編譯出可執(zhí)行文件,在windows上也就是exe碍舍。放到任何一臺(tái)機(jī)器上柠座,不需要安裝額外環(huán)境,就能直接運(yùn)行片橡!

所以編譯出FileServer.exe文件妈经,丟到服務(wù)器機(jī)子上執(zhí)行。

繼續(xù)測(cè)試捧书!結(jié)果: 成功吹泡,穩(wěn)!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末经瓷,一起剝皮案震驚了整個(gè)濱河市爆哑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舆吮,老刑警劉巖揭朝,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件队贱,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡潭袱,警方通過查閱死者的電腦和手機(jī)柱嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屯换,“玉大人编丘,你說我怎么就攤上這事√司叮” “怎么了瘪吏?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)蜗巧。 經(jīng)常有香客問我掌眠,道長(zhǎng),這世上最難降的妖魔是什么幕屹? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任蓝丙,我火速辦了婚禮,結(jié)果婚禮上望拖,老公的妹妹穿的比我還像新娘渺尘。我一直安慰自己,他們只是感情好说敏,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布鸥跟。 她就那樣靜靜地躺著,像睡著了一般盔沫。 火紅的嫁衣襯著肌膚如雪医咨。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天架诞,我揣著相機(jī)與錄音拟淮,去河邊找鬼。 笑死谴忧,一個(gè)胖子當(dāng)著我的面吹牛很泊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沾谓,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼委造,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了均驶?” 一聲冷哼從身側(cè)響起争涌,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辣恋,沒想到半個(gè)月后亮垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伟骨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年饮潦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片携狭。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡继蜡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出逛腿,到底是詐尸還是另有隱情稀并,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布单默,位于F島的核電站碘举,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏搁廓。R本人自食惡果不足惜引颈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望境蜕。 院中可真熱鬧蝙场,春花似錦、人聲如沸粱年。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽台诗。三九已至完箩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拉庶,已是汗流浹背嗜憔。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氏仗,地道東北人吉捶。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像皆尔,于是被迫代替她去往敵國和親呐舔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理慷蠕,服務(wù)發(fā)現(xiàn)珊拼,斷路器,智...
    卡卡羅2017閱讀 134,656評(píng)論 18 139
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成流炕,其中澎现,內(nèi)核的設(shè)計(jì)非常微小和簡(jiǎn)潔仅胞,完成的工作也非常簡(jiǎn)單...
    rosekissyou閱讀 10,214評(píng)論 5 124
  • 《老男孩Linux運(yùn)維》筆記 隱藏Nginx軟件版本號(hào) 一般來說,軟件的漏洞都和版本有關(guān)剑辫。因此要盡量隱藏對(duì)訪問用戶...
    Zhang21閱讀 3,642評(píng)論 0 28
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 31,931評(píng)論 2 89
  • 我有一條十二秒的語音收藏干旧,來自16年7月29號(hào),句尾我聽見你語中帶笑妹蔽。
    尋一顧記錄簿閱讀 170評(píng)論 0 0