GO 语言可以实现文件上传功能
GO 通过 net/http 包提供了方便的文件上传功能,具体实现方法如下:
1. 在前端页面中使用 input 标签定义文件上传表单:
```html
method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" /><br />
<input type="submit" value="上传" />
</form>
```
2. 在 GO 服务器中定义处理上传请求的处理器代码:
```go
func uploadHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// 解析上传的文件
file, header, err := r.FormFile("file")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer file.Close()
// 获取上传的文件名并输出
filename := header.Filename
fmt.Printf("接收到文件: %s\n", filename)
// 创建空的目标文件,准备写入
out, err := os.Create("./" + filename)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer out.Close()
// 把源文件的内容写入目标文件中
_, err = io.Copy(out, file)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
// 输出上传成功消息
w.Write([]byte("文件上传成功"))
}
}
```
在上传文件时,表单的 `enctype` 属性必须设置为 `multipart/form-data`,以便能够上传二进制文件。在处理器中,通过解析表单字段,可以获得上传的文件的文件名和文件内容,然后把文件内容写入到服务器上的一个目标文件中。最后返回一个上传成功的消息。
需要注意的是,文件上传是一种容易受到安全威胁的操作,通过一些黑客手段也可以上传有害文件,因此需要对文件进行安全校验,确保上传的文件不会对服务器造成危害。
