gpt4 book ai didi

go - 无法在 golang 网络应用程序中重定向。它坚持一页

转载 作者:数据小太阳 更新时间:2023-10-29 03:20:13 26 4
gpt4 key购买 nike

这是来自名为 upload.go 的文件的代码片段。我尝试了很多方法来重定向到另一个页面。当 POST 中的语句运行完成时,我想重定向到另一个页面。

package main

import (
"fmt"
"io"
"net/http"
"os"
"text/template"
)

func upload(w http.ResponseWriter, r *http.Request) {

if r.Method == "GET" {
// GET
t, _ := template.ParseFiles("upload.gtpl")

t.Execute(w, nil)

} else if r.Method == "POST" {
// Post
file, handler, err := r.FormFile("uploadfile")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()

fmt.Fprintf(w, "%v", handler.Header)
f, err := os.OpenFile("./test/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()

io.Copy(f, file)

img, err := imgio.Open("./test/" + handler.Filename)
if err != nil {
panic(err)
}

inverted := effect.Invert(img)
if err := imgio.Save("filename.png", inverted, imgio.PNGEncoder()); err != nil {
panic(err)
}

fmt.Fprintf(w, "%v", handler.Header)
http.Redirect(w, r, "www.google.com", http.StatusMovedPermanently)

} else {
fmt.Println("Unknown HTTP " + r.Method + " Method")
}
}

func main() {
http.HandleFunc("/upload", upload)
http.HandleFunc("/hi", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hi")
http.Redirect(w, r, "www.google.com", http.StatusMovedPermanently)
})

http.ListenAndServe(":9090", nil) // setting listening port
}

无论我做什么,它都停留在上传页面上。谁能帮我调试一下?

最佳答案

在尝试发送重定向之前,您的代码正在写入 ResponseWriter

首先write发送到 ResponseWriter,发送状态代码 (200 OK) 和 header (如果尚未发送),然后是您传递给编写器的数据。

如果您打算发送 HTTP 重定向,则不能将任何响应主体写入 ResponseWriter。通过阅读您的代码,您首先要编写代码的原因并没有多大意义。它们看起来像调试打印语句,您可能应该将其发送到 os.Stderr 或记录器而不是网页响应主体。

关于go - 无法在 golang 网络应用程序中重定向。它坚持一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55218228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com