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`,以便能够上传二进制文件。在处理器中,通过解析表单字段,可以获得上传的文件的文件名和文件内容,然后把文件内容写入到服务器上的一个目标文件中。最后返回一个上传成功的消息。


需要注意的是,文件上传是一种容易受到安全威胁的操作,通过一些黑客手段也可以上传有害文件,因此需要对文件进行安全校验,确保上传的文件不会对服务器造成危害。