为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕尼黑5688855 2022-06-06 17:11:52
我正在使用 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")。
查看完整描述

2 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

正如文档FormFile所说,它只返回第一个文件。提交表单时,该album字段将是一个数组,您必须使用多部分流来处理每个单独的文件。


rd, err:=request.MultipartReader()

for {

  part, err:=rd.NextPart()

  if err==io.EOF {

      break

  }

  data,err:=ioutil.ReadAll(part)

  fileName:=part.FileName()

  part.Close()

}

您需要添加错误处理和数据处理等。


查看完整回答
反对 回复 2022-06-06
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

可以使用请求结构的MultipartForm字段来处理 go 中的多个文件上传。


    multipartFormData := req.MultipartForm


    for _, v := range multipartFormData.File["attachments"] {

        fmt.Println(v.Filename, ":", v.Size)

        uploadedFile, _ := v.Open()

        // then use the single uploadedFile however you want

        // you may use its read method to get the file's bytes into a predefined slice, 

        //here am just using an anonymous slice for the example

        uploadedFile.Read([]byte{})

        uploadedFile.Close()

    }


查看完整回答
反对 回复 2022-06-06
  • 2 回答
  • 0 关注
  • 293 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号