Skip to content

Commit 5130150

Browse files
committed
4.5 review
1 parent 488c8cc commit 5130150

File tree

1 file changed

+15
-11
lines changed

1 file changed

+15
-11
lines changed

Diff for: 4.5.md

+15-11
Original file line numberDiff line numberDiff line change
@@ -41,23 +41,24 @@
4141
r.ParseMultipartForm(32 << 20)
4242
file, handler, err := r.FormFile("file")
4343
if err != nil {
44-
fmt.Println(err)
44+
fmt.Println(err)
4545
return
4646
}
4747
defer file.Close()
4848
fmt.Fprintf(w, "%v", handler.Header)
4949
f, err := os.OpenFile("./test/"+handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)
5050
if err != nil {
51-
panic(err)
51+
fmt.Println(err)
52+
return
5253
}
5354
defer f.Close()
5455
io.Copy(f, file)
5556
}
5657
}
5758

58-
通过上面的代码可以看到,处理文件上传我们需要调用`r.ParseMultipartForm`,里面的参数表示`maxMemory`,调用`ParseMultipartForm`之后,上传的文件存储在`maxMemory`大小的内存里面,如果文件大小超过了`maxMemory`,那么剩下的部分将存储在系统的临时文件中。我们可以通过`r.FormFile`获取上面的文件句柄,然后实例中使用了`io.Copy`来存储文件。
59+
通过上面的代码可以看到,处理文件上传我们需要调用`r.ParseMultipartForm`里面的参数表示`maxMemory`,调用`ParseMultipartForm`之后,上传的文件存储在`maxMemory`大小的内存里面,如果文件大小超过了`maxMemory`,那么剩下的部分将存储在系统的临时文件中。我们可以通过`r.FormFile`获取上面的文件句柄,然后实例中使用了`io.Copy`来存储文件。
5960

60-
>获取其他非文件字段信息的时候就不需要调用`r.ParseForm`,因为在需要的时候Go自动会去调用。而且`ParseMultipartForm`调用一次之后,后面再次调用不会再有效果。
61+
>获取其他非文件字段信息的时候就不需要调用`r.ParseForm`因为在需要的时候Go自动会去调用。而且`ParseMultipartForm`调用一次之后,后面再次调用不会再有效果。
6162
6263
通过上面的实例我们可以看到我们上传文件主要三步处理:
6364

@@ -75,8 +76,8 @@
7576

7677
我们通过上面的实例代码打印出来上传文件的信息如下
7778

78-
![](images/4.5.upload2.png?raw=true)
79-
79+
![](images/4.5.upload2.png?raw=true)
80+
8081

8182
##客户端上传文件
8283

@@ -95,7 +96,7 @@
9596
)
9697

9798
func postFile(filename string, targetUrl string) error {
98-
bodyBuf := bytes.NewBufferString("")
99+
bodyBuf := &bytes.Buffer{}
99100
bodyWriter := multipart.NewWriter(bodyBuf)
100101

101102
//关键的一步操作
@@ -113,19 +114,22 @@
113114
}
114115

115116
//iocopy
116-
io.Copy(fileWriter, fh)
117+
_, err = io.Copy(fileWriter, fh)
118+
if err != nil {
119+
return err
120+
}
117121

118122
contentType := bodyWriter.FormDataContentType()
119123
bodyWriter.Close()
120124

121125
resp, err := http.Post(targetUrl, contentType, bodyBuf)
122126
if err != nil {
123-
panic(err.Error())
127+
return err
124128
}
125129
defer resp.Body.Close()
126130
resp_body, err := ioutil.ReadAll(resp.Body)
127131
if err != nil {
128-
panic(err.Error())
132+
return err
129133
}
130134
fmt.Println(resp.Status)
131135
fmt.Println(string(resp_body))
@@ -150,4 +154,4 @@
150154
* 下一节: [小结](<4.6.md>)
151155

152156
## LastModified
153-
* $Id$
157+
* $Id$

0 commit comments

Comments
 (0)