【发布时间】:2018-06-13 02:43:52
【问题描述】:
我正在开发一个使用图像上传功能的应用程序。应用程序后端是用 Golang 编写的,而前端是用 Angular4 编写的。我正在使用 Gin 框架在 Golang 中运行 http 请求。
以下是上传图片的Golang代码:
func UploadFile(c *gin.Context){
imageData := make(map[string]interface{})
response := ResponseController{}
/* ------ Get current date ------ */
currDate := time.Now().UTC()
yearString := strconv.Itoa(currDate.Year())
monthString := strconv.Itoa(int(currDate.Month()))
dayString := strconv.Itoa(currDate.Day())
path := config.UploadBasePath+config.AppFolder+config.UploadsFolder+yearString+"/"+monthString+"/"+dayString+"/"
/* create temp directory if does not exist */
if _, err := os.Stat(path); os.IsNotExist(err) {
os.MkdirAll(path, 0755)
}
/* read data from form */
file, err := c.FormFile("file")
if err != nil {
response = ResponseController{
config.FailureCode,
config.FailureFlag,
"Error while reading image.",
nil,
}
GetResponse(c, response)
return
}
filePath := path+file.Filename
if err := c.SaveUploadedFile(file, filePath); err != nil {
response = ResponseController{
config.FailureCode,
config.FailureFlag,
"Error while uploading image.",
err,
}
GetResponse(c, response)
return
}
uploadUrl := "/"+config.UploadsFolder+yearString+"/"+monthString+"/"+dayString+"/"+file.Filename
imageData["upload_url"] = uploadUrl
response = ResponseController{
config.SuccessCode,
config.SuccessFlag,
"Image uploaded successfully.",
imageData,
}
GetResponse(c, response)
}
前端和后端在同一个域上也有子域。当请求从前端生成时。
我在 Golang 代码中传递了以下标头:
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
当我上传图片时,它在控制台中返回以下错误并且图片没有上传:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://SUBDOMAIN.DOMAIN:8080/api/v1/upload. (Reason: CORS header ‘Access-Control-Allow-Origin’ does not match ‘http://[DOMAIN-NAME].com’).
谁能指导我在这里缺少什么。谢谢!
【问题讨论】:
-
据我所知,前端页面必须使用 CORS 标头提供服务。
-
@krezus 您提供的链接适用于 Mux。我正在使用杜松子酒。
-
@PatrickBucher 如上所述,我正在为请求提供标头。但它不起作用。我需要传递更多的东西吗??
-
我认为这不是后端问题。浏览器在您的请求到达后端之前就阻止了它。你应该看看角度。
标签: go