html - 如何将文件从 html 选择器发送到 golang apis?

标签 html file go

我的 html 代码中有一个 html 文件选择器。我从那个选择器中选择一个图像并通过 jquery 将它发送到 golang 代码。但是图像文件不会被 golang 代码接收。我正在展示我的 html 和 golang 代码。

html:-

<input type="file" name="myFile" id="imageSelector"><br><br>
<button id="uploadImage">Upload Image</button>

jquery:-

$( document ).ready(function() {
    var inputFile = $('#imageSelector').val().split('\\').pop(); // give you file name
    $("#uploadImage").on("click", function(e){
        $.ajax({
            url: "/api/v1/upload",
            type: "POST",
            contentType: false,
            processData: false,
            data:{"file":inputFile},
            success: function(response){
                console.log(response);
            }
        });
    });
});

在 golang 代码中,我使用 gin 包接收它

func GetSelectedImage(c *gin.Context){
  file, err := c.FormFile("file")
  fmt.Pritnln(file) //it will show nothing
  fmt.Println(err) // request Content-Type isn't multipart/form-data
} 

错误:-

request Content-Type isn't multipart/form-data

我哪里出错了。我无法更改我的 golang 代码,但 html 代码是可编辑的。谁能告诉我我做错了什么。

最佳答案

您正在传递 data一个普通对象并告诉 jQuery 不要处理它。

这意味着它只是被转换为字符串 [object Object] jQuery 将内容类型设置为 text/plain;charset=UTF-8 .

所以它不是 multipart/form-data,也没有声称是。


传递 FormData对象,并向其传递一个文件,而不仅仅是文件名。

const data = new FormData();
data.append("file", $("#imageSelector")[0].files[0], inputFile);
// ...
contentType: false,
processData: false,
data: data,

关于html - 如何将文件从 html 选择器发送到 golang apis?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53611298/

相关文章:

php - 动态输入框更新我的sql中的插入和删除

php - wp_enqueue_style 将输出的 CSS 直接放在 HTML 中

html - div 之间的垂直线

java - 如何读取项目内的txt文件?

c - c中没有结构的反向二进制文件

go - 如何防止其他人更改返回结构的内容

google-app-engine - Google App Engine 模块主机名 : not an App Engine context

html - 使水平列表占据整个 div 宽度,而垂直列表占据最小宽度并填充其余部分

html - 将文件导入 CSS 文档不起作用

go - 模仿Python在Go列表中理解一系列数字