兄弟連區塊鏈技術Go語言教程多檔案下載和上傳

來源:互聯網
上載者:User

  所有的新技術都經曆了一些成長的痛苦,區塊鏈技術也一樣。但是,儘管它還處於發展的早期階段,但它具有改進許多行業、許多應用和系統的巨大潛力。

  Go語言具有其關鍵特性。Go語言之所以如此強大,是因為它在服務端的開發中總能抓住程式員的痛癢需求,用最直接、簡單、高效、穩定的方式來解決並實現問題。

package main

import (

"net/http"

"os"

"io"

"strconv"

)


func main() {

f, err := os.OpenFile("K:/file.mp3", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)

stat, err := f.Stat() //擷取檔案狀態

if err != nil { panic(err) } //把檔案指標指到檔案末,當然你說為何不直接用 O_APPEND 模式開啟,沒錯是可以。我這裡只是實驗。

url :=


req,_ := http.NewRequest("GET",url,nil);

req.Header.Set("Range", "bytes=" + strconv.FormatInt(stat.Size(),10) + "-")

resp, err := http.DefaultClient.Do(req)

if err != nil { panic(err) }

written, err := io.Copy(f, resp.Body)

if err != nil { panic(err) }

println("written: ", written)

}


伺服器的話就更簡單了,這個是忽略url中的/assets/,直接找到對應的raido目錄

var staticHandler http.Handler


// 靜態檔案處理

func StaticServer(w http.ResponseWriter, req *http.Request) {

    fmt.Println("path:" + req.URL.Path)

    staticHandler.ServeHTTP(w, req)

}

func init(){

    staticHandler = http.StripPrefix("/assets/", http.FileServer(http.Dir("radio")))

}


func main() {//已經有靜態檔案了

    http.HandleFunc("/assets/",StaticServer)

    err := http.ListenAndServe(":3000", nil)

    if err != nil {

        log.Fatal("ListenAndServe: ", err)

    }

}


處理多檔案上傳,如果是以數組的形式post,後面那個[]不要忘記,因為golang保留了那個中括弧.


如果form裡面變數都是唯一的,直接用parseformvalue,和parsefile就可以,因為返回的都是單個變數而不是一個數組了,省的另外運算元組。


if r.Method == "POST" {


        r.ParseMultipartForm(8 << 20)

        title := r.ParseFormValue["title"]

        fhs := r.MultipartForm.File["radio[]"]

        options := r.MultipartForm.Value["options[]"]

        answers := r.MultipartForm.Value["answers[]"]


        l := len(options)

        optionDirs := make([]string, l)

        t := time.Now()

        for i := 0; i < l; i++ {

            file, err := fhs[i].Open()

            if err != nil {

                panic(err)

            }

            filename := fhs[i].Filename

            f, err := os.OpenFile("statics/"+filename, os.O_WRONLY|os.O_CREATE, 0666)

            if err != nil {

                panic(err)

            }

            defer f.Close()

            io.Copy(f, file)

            optionDirs = append(optionDirs, filename)

        }

        db.InsertHomework(&db.HomeWork{

            Title:      title,

            Options:    options,

            OptionDirs: optionDirs,

            Answers:    answers,

            Time:       t,

        })

        sess := session.GlobalSessionManager.SessionStart(w, r)

        if sess != nil {

            sess.Set("flash", true)

        }

        defer sess.SessionRelease()

        http.Redirect(w, r, "/homeworks", http.StatusFound)

  }

高能預警,兄弟連教育區塊鏈直播課程8月持續火爆來襲!

原價1188元的12節區塊鏈進階課程,現僅需1元!

還可免費領取《Go語言基礎實戰項目開發》與《Go語言進階實戰項目開發》教材兩本!!

限時限量!!先到先得!!

http://www.ydma.cn/open/course/24 

關注兄弟連區塊鏈技術公眾號領取更多技術乾貨哦!!! 

  

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.