如何使用Go发送文件数组?

huangapple go评论88阅读模式
英文:

how post files array with Go?

问题

我有一个带有许多选项的表单,可以发布帖子并上传文件,但在Go语言中,使用Request.ParseForm()只能获取第一个文件,我该如何处理文件切片呢?

在HTML中:

<form enctype="multipart/form-data" method="POST" action="/homeworks">
  {{if .success}}
    <p>flash success</p>
  {{end}}

  <div id="postform">
    本次作业标题
    <input type="text" name="title" />
    <br>
    <div class="postoption">
      添加项目
      <input type="text" name="option[]" />
      音频文件
      <input type="file" name="radio[]" />
      答案
      <input type="text" name="answer[]" />
    </div>
  </div>

  <input type="submit" value="提交" />
</form>

如果我像这样做:

file, header, err := r.FormFile("file")
fmt.Println(header)
if err != nil {
    panic(err)
}

它会抛出"no such file"的错误,我该如何获取文件切片呢?如果我将其更改为"radio",它可以工作,但无法获取文件切片。

英文:

i have a form with many options to post, and post files with slice,but in Go, Request.ParseForm(),only get the first file, how should i resolve with file slice?

in html

&lt;form enctype=&quot;multipart/form-data&quot; method=&quot;POST&quot; action=&quot;/homeworks&quot; &gt;
  {{if .success}}
    &lt;p&gt;flash success&lt;/p&gt;
  {{end}}

  &lt;div id=&quot;postform&quot;&gt;
    本次作业标题
      &lt;input type=&quot;text&quot; name=&quot;title&quot; /&gt;
      &lt;br&gt;
    &lt;div class=&quot;postoption&quot;&gt; 
      添加项目
      &lt;input type=&quot;text&quot; name=&quot;option[]&quot; /&gt;
      音频文件
      &lt;input type=&quot;file&quot; name=&quot;radio[]&quot; /&gt;
      答案
      &lt;input type=&quot;text&quot; name=&quot;answer[]&quot; /&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;input type=&quot;submit&quot; value=&quot;提交&quot; /&gt;
&lt;/form&gt;

if i do like

	file,header,err:=r.FormFile(&quot;file&quot;)
	fmt.Println(header)
	if err!=nil{
		panic(err)
	}

it will panic no such file, how can i get files slice. if i change it to radio ,it works,but
can not get file slice.

答案1

得分: 1

这是我处理它的方式,通过阅读formfile()Go源代码。

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

fhs是多部分文件的FileHeader的头部。

通过使用Open方法,我可以获取接口file

for i := 0; i < len(fhs); i++ {
    f, err := fhs[i].Open()
}

然后我可以进行下一步操作。

英文:

that's finally how i deal with it, By reading Go source code of formfile()

fhs := r.MultipartForm.File[&quot;radio&quot;]

fhs are the Headers of FileHeader of mutlipart .

by useing Open method, i can get the interface file

for i:=0;i&lt;len(fhs);i++{
    f,err:=fhs[i].Open()
}

then i can do the next steps.

huangapple
  • 本文由 发表于 2014年2月27日 20:10:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/22068138.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定