ここで、Gin と Tus の CORS の問題に関連する同様の質問を見てきました。私が現在抱えている問題に対処するものはありません。
現在の実装は、小さなラッパーを追加することにより、標準の net/http パッケージで動作します。
// The wrapping function
func enableCors(w *http.ResponseWriter) {
(*w).Header().Set("Access-Control-Allow-Origin", "*")
}
// Simplified version of the code
composer := tusd.NewStoreComposer()
store.UseIn(composer)
handler, err := tusd.NewHandler(tusd.Config{
BasePath: "/files/",
StoreComposer: composer,
NotifyCompleteUploads: true,
})
if err != nil {
panic(fmt.Errorf("Unable to create handler %s", err))
}
go func() {
for {
fmt.Println("Waiting for upload to complete")
event := <-handler.CompleteUploads
fmt.Printf("Uploads %s finished\n", event.Upload.Storage)
}
}()
http.Handle("/files/", func(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
enableCors(&w)
next.ServeHTTP(w, r)
})
}(http.StripPrefix("/files/", handler)))
err = http.ListenAndServe(":8080", nil)
if err != nil {
panic(fmt.Errorf("unable to listen: %s", err))
}
これが私がジンで試したことです。ハンドラーを gin.WrapH() でラップしました。デフォルトの Gin CORS ライブラリ ミドルウェアを追加しましたが、それでも、cors エラーは解消されませんでした。これは機能していません
func TusHandler() http.Handler {
store := filestore.FileStore{
Path: "./uploads",
}
composer := tusd.NewStoreComposer()
store.UseIn(composer)
handler, err := tusd.NewHandler(tusd.Config{
BasePath: "/upload/tus/",
StoreComposer: composer,
NotifyCompleteUploads: true,
})
if err != nil {
panic(err) // This is to simplify the code
}
return handler
}
// The routing
import "github.com/gin-contrib/cors"
router := gin.Default()
router.Use(cors.Default())
router.GET("/upload/tuts", gin.WrapH(uploader.TusHandler()))
これが私のブラウザ出力です。 Ginバージョンを指すファイルをアップロードしようとしたとき
ジンの統合で CORS エラーが表示され続けます。それが私が解決しようとしている問題です。