提问人:carlcaroline 提问时间:10/21/2023 最后编辑:James Zcarlcaroline 更新时间:10/22/2023 访问量:57
使用 golang 中的 pdf 库读取 http 请求上传的 multipart.file
Read a multipart.file uploaded by http request with pdf library in golang
问:
我试图直接解析它,但它变成了 pdf 的二进制文件,所以我尝试了这个:将请求中的文件内容复制到放置在同一包中的新文件中并读取它,但它变成了文件是空的。谁能解释一下用于解决这个问题的逻辑?如果您对我可以使用的软件包有任何建议,也请告诉我
func (c *Client) HandleUpload(writer http.ResponseWriter, request *http.Request) {
ctx, cancel := c.createContextWithTimeout(TimeoutHandleUpload)
defer cancel()
f, _, err := request.FormFile("data")
if err != nil {
c.httpError(writer, err)
return
}
defer f.Close()
err = c.ReadFile(f)
if err != nil {
c.httpError(writer, err)
return
}
_ = httputil.WriteObj200(writer, nil)
}
func (c *Client) ReadFile(f multipart.File) (err error) {
var buf bytes.Buffer
var file bytes.Buffer
_, err = io.Copy(&buf, f)
if err != nil {
log.Fatal(err)
}
if err := os.WriteFile("file.pdf", file.Bytes(), 0666); err != nil {
log.Fatal(err)
}
uploadedFile, err := os.Open("file.pdf")
if err != nil {
log.Fatal(err)
}
defer uploadedFile.Close()
_, err = io.Copy(uploadedFile, &file)
fmt.Println("file")
absPath, err := filepath.Abs("file.pdf")
content, err := os.ReadFile(absPath)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(content))
}
答: 暂无答案
评论
os.Open()
并采用绝对路径,您正在通过相对路径。路径解析为操作系统的根目录(Linux 为“/”,Windows 为“c:\”),您需要使用该函数。还有一件事是我建议你使用而不是os.WriteFile()
filepath.Abs()
os.Create()
os.WriteFile()