reactjs - 如何使用 Gin + React 上传文件?
问题描述
我想从 React 上传图像文件,这样做似乎我需要将图像存储在服务器上并从 POST 请求中检索它,以便将其修改为 url 路径。
- 使用 Gin Gonic http 框架。
这是我的 POST 请求在 React 中的表单:
<form action="/upload" method="POST">
<label htmlFor="upload" onChange={onChange}>
<FontAwesomeIcon icon={faUserCircle} color="#3B5998" size="10x" className={`${pointer}`} />
<input type="file" hidden id="upload" name="upload" />
</label>
</form>
这是我正在调用的方法,onChange
以将请求与图像文件一起发送:
uploadFile = (file) => {
const formData = new FormData();
formData.append('image', file);
axios({
method: 'post',
url: `${gamingApiBaseURL}/v1/upload-image`,
data: formData,
headers: { 'Content-Type': 'multipart/form-data' },
}).catch((error) => {
console.log('error storing image', error);
});
};
这是我的 Go 结构,用于绑定请求
type ImageForm struct {
Image *multipart.FileHeader `form:"upload binding:"required"`
}
最后,应该获取图像文件并将其上传到服务器的方法。这是我到目前为止所拥有的。我收到一条错误消息,说http: no such file
这很奇怪,因为在 Postman 中我看到了image
密钥和文件名,我试图理解在 Go 中上传图像的工作原理。
func extractImage(c *gin.Context) {
// Using 'ShouldBind'
formFile, err := c.FormFile("image")
fmt.Println("Error", err)
if err != nil {
c.JSON(http.StatusBadRequest, err)
}
fmt.Println("form error", formFile)
}
解决方案
我认为这个结构标签是错误的
type ImageForm struct {
Image *multipart.FileHeader `form:"upload binding:"required"`
}
改成这个(后面缺少双引号upload
):
type ImageForm struct {
Image *multipart.FileHeader `form:"upload" binding:"required"`
}
推荐阅读
- scala - java.lang.NoClassDefFoundError:com/amazonaws/services/glue/GlueContext
- bash - 如何在并行/后台运行多个bash脚本实例,从文件中获取参数?
- modelica - Modelica:我可以使用 IncludeDirectory 在 Windows 中指定绝对路径吗?
- authentication - Spring-security/Grails 应用程序 - 未调用自定义 WebSecurity 配置
- excel - 如何搜索所有工作表并返回与找到的项目在同一列中的单元格?
- python-3.x - 如何使用特定的 jar 运行 python spark 脚本
- plsql - 使用 dbms_lob.compare 比较 CLOB,没有得到我想要的结果
- google-analytics - 尝试将网络媒体资源链接到 AdWords (Google Ads) 帐户时出现 InsufficientPermission (403)
- laravel - 提供用户角色时的动态路由前缀
- javascript - 如何在 Create React App 中使用 Enzyme 和 Jest 从已安装的组件中读取 console.log