草庐IT

html - 尽管表单有效,但 ParseMultipartForm 总是失败

coder 2024-07-13 原文

我正在尝试在 go http 服务器中处理上传的文件。但是调用 ParseMultipartForm 总是失败并出现奇怪的错误:“multipart: NextPart: EOF” 尽管表单是有效的。调试它,我可以看到我得到了完整的编码数据、大小和参数。然而它解析失败。

这是 html 表单:

<html>
<head>
     <title>Upload file</title>
</head>
<body>
<form enctype="multipart/form-data" action="http://localhost:8080/uploadLogo/" method="post">
    <input type="file" name="uploadfile" />
    <input type="hidden" name="token" value="{{.}}" />
    <input type="submit" value="upload" />
</form>
</body>
</html>

这里是相关的上传函数:

// upload logic
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 {
        err := r.ParseMultipartForm(5 * 1024 * 1024 * 1024)
        if err != nil {
            fmt.Println("Error ParseMultipartForm: ", err) // here it fails !!! with: "multipart: NextPart: EOF"
            return
        }

        file, handler, err := r.FormFile("uploadfile")
        if err != nil {
            fmt.Println("Error parsing file", err)
            return
        }
        defer file.Close()
        fmt.Fprintf(w, "%v", handler.Header)
        fmt.Println("filename:", handler.Filename)
        f, err := os.OpenFile(logosDir + handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
        if err != nil {
            fmt.Println(err)
            return
        }
        defer f.Close()
        io.Copy(f, file)
   }
}

无法理解为什么会这样。

这是我启动服务器的方式:

func uploadLogoHandler(w http.ResponseWriter, r *http.Request) {
    //fmt.Fprintf(w, "viewLogoHandler, Path: %s!", r.URL.Path[1:])
    bodyBytes, _ := ioutil.ReadAll(r.Body)
    bodyString := string(bodyBytes)
    writeToLog("uploadLogoHandler:" + r.URL.Path, "bodyString length:" + strconv.Itoa(len(bodyString)))
    upload(w, r)
}

///////////////////////////////////////////////////////////////////////////////////////
// main

func main() {
    if(len(os.Args) < 2) {
        fmt.Println("Usage: receiver [port number]")
        os.Exit(1)
    }

    port := os.Args[1]

    s := &http.Server{
        Addr:           ":" + port,
        ReadTimeout:    10 * time.Second,
        WriteTimeout:   10 * time.Second,
    }   
    http.HandleFunc("/uploadLogo/", uploadLogoHandler)
    http.HandleFunc("/", handler)
    log.Fatal(s.ListenAndServe())
}

最佳答案

在写问题时我已经找到了问题所在。它在句柄函数中。我在调用上传函数之前读取了所有的流数据。这是处理程序的修改代码,现在一切正常:

func uploadLogoHandler(w http.ResponseWriter, r *http.Request) {
    writeToLog("uploadLogoHandler:" + r.URL.Path, "")
    upload(w, r)
}

如果我理解正确,那么错误:“multipart: NextPart: EOF”意味着表单是空的 - 它是空的,因为我之前清空了缓冲流。

希望对其他人有所帮助。 最好的。

关于html - 尽管表单有效,但 ParseMultipartForm 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53981191/

有关html - 尽管表单有效,但 ParseMultipartForm 总是失败的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  3. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  4. ruby-on-rails - 使用 Sublime Text 3 突出显示 HTML 背景语法中的 ERB? - 2

    所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择

  5. ruby - 如何进行排列以有效地定制输出 - 2

    这是一道面试题,我没有答对,但还是很好奇怎么解。你有N个人的大家庭,分别是1,2,3,...,N岁。你想给你的大家庭拍张照片。所有的家庭成员都排成一排。“我是家里的friend,建议家庭成员安排如下:”1岁的家庭成员坐在这一排的最左边。每两个坐在一起的家庭成员的年龄相差不得超过2岁。输入:整数N,1≤N≤55。输出:摄影师可以拍摄的照片数量。示例->输入:4,输出:4符合条件的数组:[1,2,3,4][1,2,4,3][1,3,2,4][1,3,4,2]另一个例子:输入:5输出:6符合条件的数组:[1,2,3,4,5][1,2,3,5,4][1,2,4,3,5][1,2,4,5,3][

  6. ruby - 如何在 Rails 4 中使用表单对象之前的验证回调? - 2

    我有一个服务模型/表及其注册表。在表单中,我几乎拥有服务的所有字段,但我想在验证服务对象之前自动设置其中一些值。示例:--服务Controller#创建Action:defcreate@service=Service.new@service_form=ServiceFormObject.new(@service)@service_form.validate(params[:service_form_object])and@service_form.saverespond_with(@service_form,location:admin_services_path)end在验证@ser

  7. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  8. ruby - 即使失败也继续进行多主机测试 - 2

    我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r

  9. ruby-on-rails - Ruby url 到 html 链接转换 - 2

    我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.

  10. ruby-on-rails - capybara ::ElementNotFound:无法找到 xpath "/html" - 2

    我正在学习http://ruby.railstutorial.org/chapters/static-pages上的RubyonRails教程并遇到以下错误StaticPagesHomepageshouldhavethecontent'SampleApp'Failure/Error:page.shouldhave_content('SampleApp')Capybara::ElementNotFound:Unabletofindxpath"/html"#(eval):2:in`text'#./spec/requests/static_pages_spec.rb:7:in`(root)'

随机推荐