【发布时间】:2017-02-18 16:26:39
【问题描述】:
我正在使用 vaadin upload 在带有聚合物的 Web 应用程序上上传文件。我正在使用 golang 作为后端。
<vaadin-upload target="../upload" max-files="20" accept="application/pdf,image/*"
method="POST"> </vaadin-upload>
我检查了 vaadin 上传中使用的编码类型是 multipart/form-data。 我的golang代码如下。
func upload(w http.ResponseWriter, r *http.Request) {
fmt.Println("method:", r.Method)
if r.Method == "GET" {
crutime := time.Now().Unix()
h := md5.New()
io.WriteString(h, strconv.FormatInt(crutime, 10))
token := fmt.Sprintf("%x", h.Sum(nil))
t, _ := template.ParseFiles("upload.gtpl")
t.Execute(w, token)
} else {
r.ParseMultipartForm(32 << 20)
file, handler, err := r.FormFile("uploadFile")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
fmt.Fprintf(w, "%v", handler.Header)
f, err := os.OpenFile("./test/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
io.Copy(f, file)
}
}
它在服务器端出现错误http:没有这样的文件。我检查了当请求中不存在提供的文件字段名称或不是文件字段时,FormFile 返回此错误。
【问题讨论】:
-
1.找出您的代码在哪里失败。 2. 确保像
"./test/"+handler.Filename这样的东西实际上产生了适合写作的东西(例如 ./test 必须存在)。 -
我的代码在这部分文件、处理程序、错误中失败:= r.FormFile("uploadFile")
-
这就是我想知道的我该如何处理。我不知道在这里写什么 FormFile("WHAT!!").因此,代码给出错误
-
嗯,这是一个 vaadin-only 问题。转储请求并查看。或者使用浏览器的开发者工具跟踪浏览器的功能。
-
您可以添加完整的错误行吗?只是为了检查哪条线路出现故障。另外,我在您的 html 标记中看不到 name 字段,请记住属性 name 的值必须与
r.FormFile("value_name")相同