使用 Go 在 post 请求中处理多个文件

我正在使用 Go 为音乐流媒体服务编写服务器端。我需要能够处理专辑上传。我希望管理员能够访问http://lisn.rocks/upload,选择一个必须包含meta.json、cover.jpg和一些.mp3歌曲文件的文件夹,单击上传,其余的由服务器处理。


这是我用来测试此功能的简单 HTML 页面:


<html>

    <head><title>Album Upload</title></head>

    <body>

        <form enctype="multipart/form-data" action="/upload" method="POST">

            <input type="file" name="album" webkitdirectory directory multiple> <br>

            <input type="submit" value="Upload">

        </form>

    </body>

</html>

我需要一个处理函数,它能够查看meta.json文件、检查其内容并根据那里的内容进行处理。meta.json包含我需要的所有信息。现在,我不需要关于使用 Go 或其他相关内容读取 JSON 的详细说明。


我只需要将该文件夹中的所有文件作为单独的文件读取。album相反,当我这样做时,Go 将它们全部视为一个文件字段request.FormFile("album")。


慕尼黑5688855
浏览 294回答 2
2回答

智慧大石

正如文档FormFile所说,它只返回第一个文件。提交表单时,该album字段将是一个数组,您必须使用多部分流来处理每个单独的文件。rd, err:=request.MultipartReader()for {&nbsp; part, err:=rd.NextPart()&nbsp; if err==io.EOF {&nbsp; &nbsp; &nbsp; break&nbsp; }&nbsp; data,err:=ioutil.ReadAll(part)&nbsp; fileName:=part.FileName()&nbsp; part.Close()}您需要添加错误处理和数据处理等。

慕工程0101907

可以使用请求结构的MultipartForm字段来处理 go 中的多个文件上传。&nbsp; &nbsp; multipartFormData := req.MultipartForm&nbsp; &nbsp; for _, v := range multipartFormData.File["attachments"] {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println(v.Filename, ":", v.Size)&nbsp; &nbsp; &nbsp; &nbsp; uploadedFile, _ := v.Open()&nbsp; &nbsp; &nbsp; &nbsp; // then use the single uploadedFile however you want&nbsp; &nbsp; &nbsp; &nbsp; // you may use its read method to get the file's bytes into a predefined slice,&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; //here am just using an anonymous slice for the example&nbsp; &nbsp; &nbsp; &nbsp; uploadedFile.Read([]byte{})&nbsp; &nbsp; &nbsp; &nbsp; uploadedFile.Close()&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go