首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多文件上传

多文件上传
EN

Stack Overflow用户
提问于 2014-11-05 05:41:47
回答 2查看 3.2K关注 0票数 3

如何上传多个文件?GetFile方法只返回第一个文件名。

html:

代码语言:javascript
复制
<form action="/post/save" method="POST" enctype="multipart/form-data">
    <input type="file" name="images" multiple>
</form>

在主计长:

代码语言:javascript
复制
file, header, err := this.GetFile("images")
if err != nil {
    log.Println("error", err)
} else {
    log.Println("filename", header.Filename)
}

可以这样做吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-05 05:28:06

似乎Beego没有一种方便的方法来上传多个文件。GetFile()只是从标准库中包装FromFile()。您可能希望使用标准库的读取器函数: r.MultipartReader()。

在这种情况下,我通常通过调用以下命令从控制器公开响应读取器和写入器:

代码语言:javascript
复制
w = this.Ctx.ResponseWriter
r = this.Ctx.ResponseReader

现在,我能够以标准的方式使用net/http包,并在框架之外实现解决方案。

快速搜索Go中的多个文件会让我找到有帮助的博客帖子

为了保护这个答案不受链接腐烂的影响,下面是作者的解决方案:

代码语言:javascript
复制
func uploadHandler(w http.ResponseWriter, r *http.Request) {
    switch r.Method {
    //GET displays the upload form.
    case "GET":
        display(w, "upload", nil)

    //POST takes the uploaded file(s) and saves it to disk.
    case "POST":
        //get the multipart reader for the request.
        reader, err := r.MultipartReader()

        if err != nil {
            http.Error(w, err.Error(), http.StatusInternalServerError)
            return
        }

        //copy each part to destination.
        for {
            part, err := reader.NextPart()
            if err == io.EOF {
                break
            }

            //if part.FileName() is empty, skip this iteration.
            if part.FileName() == "" {
                continue
            }
            dst, err := os.Create("/home/sanat/" + part.FileName())
            defer dst.Close()

            if err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }

            if _, err := io.Copy(dst, part); err != nil {
                http.Error(w, err.Error(), http.StatusInternalServerError)
                return
            }
        }
        //display success message.
        display(w, "upload", "Upload successful.")
    default:
        w.WriteHeader(http.StatusMethodNotAllowed)
    }
}
票数 2
EN

Stack Overflow用户

发布于 2016-01-13 09:59:39

this.GetFiles

"GetFiles返回多上传文件“

https://github.com/astaxie/beego/blob/master/controller.go

第450行

代码语言:javascript
复制
// GetFiles return multi-upload files
 files, err:=c.Getfiles("myfiles")
    if err != nil {
        http.Error(w, err.Error(), http.StatusNoContent)
        return
    }
 for i, _ := range files {`enter code here
    for each fileheader, get a handle to the actual file
    file, err := files[i].Open()
    defer file.Close()
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    //create destination file making sure the path is writeable.
    dst, err := os.Create("upload/" + files[i].Filename)
    defer dst.Close()
    if err != nil {
    enter code here

        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    //copy the uploaded file to the destination file
    if _, err := io.Copy(dst, file); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
 }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26750457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档