修复一些字
This commit is contained in:
15
4.5.md
15
4.5.md
@@ -1,5 +1,5 @@
|
||||
#4.5处理文件上传
|
||||
你想处理一个由用户上传的文件。例如,你正在建设一个类似Instagram 的网站,所以需要处理和存储用户提供的照片。我们该如何处理呢?
|
||||
你想处理一个由用户上传的文件。比如你正在建设一个类似Instagram的网站,你需要存储用户拍摄的照片。这种需求该如何实现呢?
|
||||
|
||||
文件要能够上传,首先第一步就是要修改form的`enctype`属性,`enctype`属性有如下三种情况:
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
multipart/form-data 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
|
||||
text/plain 空格转换为 "+" 加号,但不对特殊字符编码。
|
||||
|
||||
我们如果要使得文件能够上传,那么我们的html应该如下所示
|
||||
如果要支持文件上传,我们的html应该类似于:
|
||||
|
||||
<html>
|
||||
<head>
|
||||
@@ -22,7 +22,7 @@
|
||||
</body>
|
||||
</html>
|
||||
|
||||
我们增加一个handlerFunc如下:
|
||||
在服务器端,我们增加我们增加一个handlerFunc:
|
||||
|
||||
http.HandleFunc("/upload", upload)
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
r.ParseMultipartForm(32 << 20)
|
||||
file, handler, err := r.FormFile("file")
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
fmt.Println(err)
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
fmt.Fprintf(w, "%v", handler.Header)
|
||||
@@ -54,7 +55,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
通过上面的代码我们可以看到,文件上传我们需要调用`r.ParseMultipartForm`,里面的参数表示maxMemory,调用`ParseMultipartForm`之后我们上传的文件存储在设置的那么大的内存里面,如果文件大小超过了这个内存,那么剩下的部分存储在系统的临时文件中。我们可以通过`r.FormFile`获取上面的文件句柄,然后实例中使用了`io.Copy`来存储文件。
|
||||
通过上面的代码可以看到,处理文件上传我们需要调用`r.ParseMultipartForm`,里面的参数表示`maxMemory`,调用`ParseMultipartForm`之后,上传的文件存储在`maxMemory`大小的内存里面,如果文件大小超过了`maxMemory`,那么剩下的部分将存储在系统的临时文件中。我们可以通过`r.FormFile`获取上面的文件句柄,然后实例中使用了`io.Copy`来存储文件。
|
||||
|
||||
>获取其他非文件字段信息的时候就不需要调用`r.ParseForm`,因为在需要的时候Go自动会去调用。而且`ParseMultipartForm`调用一次之后,后面再次调用不会再有效果。
|
||||
|
||||
@@ -74,7 +75,9 @@
|
||||
|
||||
我们通过上面的实例代码打印出来上传文件的信息如下
|
||||
|
||||

|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user