forked from johnzeng/LeanCloud-go-sdk
-
Notifications
You must be signed in to change notification settings - Fork 0
/
File.go
79 lines (66 loc) · 1.96 KB
/
File.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package lean
import (
"encoding/json"
"github.com/parnurzeal/gorequest"
"io/ioutil"
"net/http"
"os"
)
//be attention that EmailVerified and MobilePhoneVerified can be nil
type File struct {
LeanClassesBase
Name string `json:"name,omitempty"`
FileType string `json:"mime_type,omitempty"`
Key string `json:"key,omitempty"`
Type string `json:"__type,omitempty"`
Url string `json:"url,omitempty"`
Bucket string `json:"bucket,omitempty"`
MetaData map[string]interface{} `json:"metaData,omitempty"`
}
func (this *leanClient) UploadPlainText(fileName, content string) (*File, error) {
url := UrlBase + "/files/" + fileName
request := gorequest.New()
superAgent := request.Post(url).
Send(content)
superAgent.Set("Content-Type", "text/plain")
agent := &Agent{
superAgent: superAgent,
client: this,
}
if err := agent.Do(); nil != err {
return nil, err
}
ret := &File{}
if err := agent.ScanResponse(ret); nil != err {
return nil, err
}
return ret, nil
}
//content-type can be text/plain,image/*, or empty
func (this *leanClient) UploadFile(fileName, contentType string, file *os.File) (*File, error) {
//as gorequest doesn't have a good support for binary request, so I have to make the request by native http.request api,this is bad
url := UrlBase + "/files/" + fileName
if "" != contentType {
contentType = "application/json"
}
httpRequest, err := http.NewRequest("POST", url, file)
if nil != err {
return nil, err
}
httpRequest.Header.Add("X-LC-Key", this.appKey)
httpRequest.Header.Add("X-LC-Id", this.appId)
client := http.Client{}
httpResponse, err := client.Do(httpRequest)
if nil != err {
return nil, err
}
ret := &File{}
retBytes, err := ioutil.ReadAll(httpResponse.Body)
if nil != err {
return nil, err
}
if jsonErr := json.Unmarshal(retBytes, ret); nil != jsonErr {
return nil, jsonErr
}
return ret, nil
}