golang处理web客户端提交的多个文件

志城 · · 1528 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  • html代码
<form id="userForm" action="" enctype="multipart/form-data" method="post">
  <input id="imgInput" type="file" name="imgInput" accept="image/*" multiple/>
  <input " type="button" value="提交" onclick="ajaxSubmitForm();" />
</form>
  • js代码
function ajaxSubmitForm() {
      var option = {
         url : '/feedBackSubmit',
         type : 'POST',
         dataType : 'json',
         success : function(data) {                     
              if (data.code == 1) {//成功    
                if (data.content != "") {
                  alert(data.content);
                } else {
                  alert("成功!");                        
                }                              
              } else {//失败
                if (data.content != "") {
                  alert(data.content);
                } else {
                  alert("失败,请重试!");
                }                  
              }                   
          },
          beforeSubmit : function(arr, $form, options){
                                    
          },
          error: function(data) {
              alert("意见反馈失败,请重试!");
          }
      };
      $("#userForm").ajaxSubmit(option);
      return false; //最好返回false,因为如果按钮类型是submit,则表单自己又会提交一次;返回false阻止表单再次提交
  }
  • golang代码
main.go

package main
func main() {
    http.HandleFunc("/feedBackSubmit", feedBackSubmit) //意见反馈
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        log.Fatal(":8080监听失败:", err)
    }
}

func feedBackSubmit(w http.ResponseWriter, r *http.Request) {
    r.ParseMultipartForm(32 << 20)
    if r.Method == "GET" {
        fmt.Fprintf(w, "InvalidRequest!") //这个写入到w的是输出到客户端的
        return
    } else if r.Method == "POST"        
        files := r.MultipartForm.File["imgInput"]
        var fileNamePath = ""
        if files != nil {
            l := len(files)
            for i := 0; i < l; i++ {
                file, err := files[i].Open()
                defer file.Close()
                if err != nil {
                    log.Println(err)
                }
                s1 := strings.Split(files[i].Filename, ".")
                fielType := s1[len(s1)-1]

                newFileName := TimeUUID().String() + "." + fielType
                cur, err := os.Create(Common.GetParentDirectory() + "/support/" + newFileName)
                defer cur.Close()
                if err != nil {
                    log.Println(err)
                } else {
                    if i == 0 {
                        fileNamePath = Common.GetParentDirectory() + "/support/" + newFileName
                    } else {
                        fileNamePath = fileNamePath + "," + Common.GetParentDirectory() + "/support/" + newFileName
                    }
                }
                io.Copy(cur, file)
            }
        }
    }
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:志城

查看原文:golang处理web客户端提交的多个文件

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1528 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传