为了账号安全,请及时绑定邮箱和手机立即绑定

上传文件时杜松子酒不断返回204

上传文件时杜松子酒不断返回204

Go
尚方宝剑之说 2022-05-18 14:19:44
我用 OPTIONS 方法得到一个 204,但似乎没有达到终点 只需像这样构建一个简单的文件上传端点:package mainimport  (    "cloud.google.com/go/storage"    "github.com/gin-gonic/gin"    "github.com/gin-contrib/cors"    "google.golang.org/api/option"    "io"    "log") const uploadBucket = "some-cool-bucket-name" const uploadApiKey = "some-advanced-key"func main() {    router := gin.Default()    rg := router.Group("api/v1/photo")    {        rg.PATCH("/", uploadFile)    }    router.Use(cors.Default())    router.Run()}func uploadFile(c *gin.Context) {    mr, e := c.Request.MultipartReader()    if e != nil {        panic("Error reading request")    }    client, e := storage.NewClient(c, option.WithAPIKey(uploadApiKey))    bucket := client.Bucket(uploadBucket)    for {        p, e := mr.NextPart()        if e == io.EOF {            break        } else if e != nil {            panic("Error processing file")        }        w := bucket.Object(p.FileName()).NewWriter(c)        if _, e := io.Copy(w, p); e != nil {            panic("Error during chunk upload")        } else if e := w.Close(); e != nil {            panic("Could not finalize chunk writing")        }    }}任何想法为什么?
查看完整描述

2 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

在 CORS 下使用:


func CORS() gin.HandlerFunc {

    // TO allow CORS

    return func(c *gin.Context) {

        c.Writer.Header().Set("Access-Control-Allow-Origin", "*")

        c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")

        c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")

        if c.Request.Method == "OPTIONS" {

            c.AbortWithStatus(204)

            return

        }

        c.Next()

    }

}

接下来,您必须将 cors 添加到您的路线中:


    router := gin.Default()

    router.Use(CORS())

另外,最好使用 POST 方法而不是 PATCH。我很确定它会解决你的问题。


查看完整回答
反对 回复 2022-05-18
?
函数式编程

TA贡献1807条经验 获得超9个赞

您可以通过使用POST方法而不是PATCH.

例如:

func main() {
    router := gin.Default()
    rg := router.Group("api/v1/photo")
    {
        rg.POST("/", uploadFile)
    }
    router.Use(cors.Default())
    router.Run()}

潜在的 CORS 问题

您可能需要在 Go 服务中设置正确的跨域资源共享

一些额外的参考

所以回答常见 HTTP 方法之间的差异 - PUT、POST 和 PATCH 有什么区别?.

PATCH:提交对资源的部分修改。如果您只需要更新资源的一个字段,您可能需要使用 PATCH 方法。

HTTP 文件上传是如何工作的?


查看完整回答
反对 回复 2022-05-18
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信