兄弟连区块链技术Go语言教程多文件下载和上传

兄弟连区块链培训 · · 602 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  所有的新技术都经历了一些成长的痛苦,区块链技术也一样。但是,尽管它还处于发展的早期阶段,但它具有改进许多行业、许多应用和系统的巨大潜力。

  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 

关注兄弟连区块链技术公众号领取更多技术干货哦!!! 

  


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:兄弟连区块链培训

查看原文:兄弟连区块链技术Go语言教程多文件下载和上传

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

602 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传