Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用go处理文件上载_Javascript_Html_Http_Go_Multipartform Data - Fatal编程技术网

Javascript 使用go处理文件上载

Javascript 使用go处理文件上载,javascript,html,http,go,multipartform-data,Javascript,Html,Http,Go,Multipartform Data,我最近才开始玩围棋,所以我还是个笨蛋,如果我犯了太多的错误,我很抱歉。我一直试图解决这个问题很长一段时间,但我只是不明白发生了什么。在我的main.go文件中,我有一个主要功能: func main() { http.HandleFunc("/", handler) http.HandleFunc("/submit/", submit) log.Fatal(http.ListenAndServe(":8080", nil)) } 处理程序函数如下所示: func han

我最近才开始玩围棋,所以我还是个笨蛋,如果我犯了太多的错误,我很抱歉。我一直试图解决这个问题很长一段时间,但我只是不明白发生了什么。在我的main.go文件中,我有一个主要功能:

func main() {
    http.HandleFunc("/", handler)
    http.HandleFunc("/submit/", submit)
    log.Fatal(http.ListenAndServe(":8080", nil))
}
处理程序函数如下所示:

func handler(w http.ResponseWriter, r *http.Request) {
    data, _ := ioutil.ReadFile("web/index.html")
    w.Write(data)
}
func submit(w http.ResponseWriter, r *http.Request) {
    log.Println("METHOD IS " + r.Method + " AND CONTENT-TYPE IS " + r.Header.Get("Content-Type"))
    r.ParseMultipartForm(32 << 20)
    file, header, err := r.FormFile("uploadFile")
    if err != nil {
        json.NewEncoder(w).Encode(Response{err.Error(), true})
        return
    }
    defer file.Close()

    out, err := os.Create("/tmp/file_" + time.Now().String() + ".png")
    if err != nil {
        json.NewEncoder(w).Encode(Response{err.Error(), true})
        return
    }
    defer out.Close()

    _, err = io.Copy(out, file)
    if err != nil {
        json.NewEncoder(w).Encode(Response{err.Error(), true})
        return
    }

    json.NewEncoder(w).Encode(Response{"File '" + header.Filename + "' submited successfully", false})
}
function upload() {
    fetch('/submit', {
        method: 'post',
        headers: {
          "Content-Type": "multipart/form-data"
        },
        body: new FormData(document.querySelector('#form')
    }).then(function json(response) {
        return response.json()
    }).then(function(data) {
        window.console.log('Request succeeded with JSON response', data);
    }).catch(function(error) {
        window.console.log('Request failed', error);
    });
}

<form id="form" method="post" enctype="multipart/form-data" action="/submit"><input id="file-input" type="file" name="uploadFile" /></form>
fetch('/submit', {
    method: 'post',
    headers: {
        "Content-Type": "multipart/form-data; boundary=------------------------" + boundary
    }, body: formData})
var boundary = Math.random().toString().substr(2);
我知道这不是为网站服务的最佳方式 提交函数如下所示:

func handler(w http.ResponseWriter, r *http.Request) {
    data, _ := ioutil.ReadFile("web/index.html")
    w.Write(data)
}
func submit(w http.ResponseWriter, r *http.Request) {
    log.Println("METHOD IS " + r.Method + " AND CONTENT-TYPE IS " + r.Header.Get("Content-Type"))
    r.ParseMultipartForm(32 << 20)
    file, header, err := r.FormFile("uploadFile")
    if err != nil {
        json.NewEncoder(w).Encode(Response{err.Error(), true})
        return
    }
    defer file.Close()

    out, err := os.Create("/tmp/file_" + time.Now().String() + ".png")
    if err != nil {
        json.NewEncoder(w).Encode(Response{err.Error(), true})
        return
    }
    defer out.Close()

    _, err = io.Copy(out, file)
    if err != nil {
        json.NewEncoder(w).Encode(Response{err.Error(), true})
        return
    }

    json.NewEncoder(w).Encode(Response{"File '" + header.Filename + "' submited successfully", false})
}
function upload() {
    fetch('/submit', {
        method: 'post',
        headers: {
          "Content-Type": "multipart/form-data"
        },
        body: new FormData(document.querySelector('#form')
    }).then(function json(response) {
        return response.json()
    }).then(function(data) {
        window.console.log('Request succeeded with JSON response', data);
    }).catch(function(error) {
        window.console.log('Request failed', error);
    });
}

<form id="form" method="post" enctype="multipart/form-data" action="/submit"><input id="file-input" type="file" name="uploadFile" /></form>
fetch('/submit', {
    method: 'post',
    headers: {
        "Content-Type": "multipart/form-data; boundary=------------------------" + boundary
    }, body: formData})
var boundary = Math.random().toString().substr(2);
下面是HTML:

<input id="file-input" type="file" name="uploadFile" />

当使用curl时,我正在运行的控制台没有输出任何内容。

我设法解决了我的问题,所以这里是为了防止其他人需要它。感谢@jiangid提供了使用curl测试服务器的技巧

TL;博士

  • 我写了
    http.HandleFunc(“/submit/”,submit)
    ,但我向
    /submit
    (请注意缺少的斜杠)发出了一个POST请求,完全删除标题实际上是可行的。尤其是通过fetch或axios发送请求时

    axios.post(
                        endpoint + "/api/v1/personalslip",
                        {
                          newSlip
                        },
                        {
    
    
                         
                        }
                      )
                      .then(res => {
                        console.log(res);
                      });
    

    第一步,使用curl检查服务器是否正常。您需要在表单标签上设置method和enctype属性。输入标记与GET/POST决策、多部分编码和内容类型设置无关。@Volker我认为在fetch中指定
    method:POST
    header:{'content-type':'multipart/form data'}
    就足够了,我不需要标记,但我也尝试使用了类似于
    的标记,然后,我使用
    newformdata
    以该表单提交数据,但这不起作用,所以我想这一定是其他原因。@jiangid当我使用运行
    go-run main的控制台时。go
    不记录任何内容,就好像提交功能从未运行过一样。我正在使用这个命令:
    curl-v-F'uploadFile=@\'C:/Users/raul-/Desktop/test.png\'http://localhost:8080/submit
    在Windows中。我得到一个永久移动的
    HTTP/1.1 301
    响应,并在发送结束前说
    HTTP错误,停止发送
    ,这可能解释了为什么提交功能没有运行。@Jingid我用整个curl输出更新了我的问题,以备您需要更多信息。感谢您的洞察力。帮了我很多忙。“注意那条丢失的斜线”救了我一天。请强调您的注释,因为这可能是罪魁祸首-+1