github.com/elliott5/community@v0.14.1-0.20160709191136-823126fb026a/sdk/loadfile.go (about) 1 // Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved. 2 // 3 // This software (Documize Community Edition) is licensed under 4 // GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html 5 // 6 // You can operate outside the AGPL restrictions by purchasing 7 // Documize Enterprise Edition and obtaining a commercial license 8 // by contacting <sales@documize.com>. 9 // 10 // https://documize.com 11 12 package documize 13 14 import ( 15 "bytes" 16 "encoding/json" 17 "errors" 18 "io" 19 "io/ioutil" 20 "mime/multipart" 21 "net/http" 22 "os" 23 "path" 24 25 "github.com/documize/community/documize/api/entity" 26 ) 27 28 func (c *Client) upload(folderID, fileName string, fileReader io.Reader) (*entity.Document, error) { 29 30 bodyBuf := &bytes.Buffer{} 31 bodyWriter := multipart.NewWriter(bodyBuf) 32 33 _, fn := path.Split(fileName) 34 fileWriter, err := bodyWriter.CreateFormFile("attachment", fn) 35 if err != nil { 36 return nil, err 37 } 38 _, err = io.Copy(fileWriter, fileReader) 39 if err != nil { 40 return nil, err 41 } 42 contentType := bodyWriter.FormDataContentType() 43 err = bodyWriter.Close() 44 if err != nil { 45 return nil, err 46 } 47 48 req, err := http.NewRequest("POST", 49 c.BaseURL+"/api/import/folder/"+folderID, 50 bodyBuf) 51 if err != nil { 52 return nil, err 53 } 54 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 55 req.Header.Set("Content-Type", contentType) 56 resp, err := c.Client.Do(req) 57 if err != nil { 58 return nil, err 59 } 60 defer resp.Body.Close() // ignore error 61 62 var du entity.Document 63 64 msg, err := ioutil.ReadAll(resp.Body) 65 if err != nil { 66 return nil, err 67 } 68 err = json.Unmarshal(msg, &du) 69 if err != nil { 70 return nil, errors.New(trimErrors(string(msg))) 71 } 72 73 return &du, nil 74 } 75 76 /* 77 func (c *Client) convert(folderID string, du *endpoint.DocumentUploadModel, cjr *api.ConversionJobRequest) (*endpoint.DocumentConversionModel, error) { 78 79 if cjr == nil { 80 cjr = &api.ConversionJobRequest{} 81 } 82 83 buf, err := json.Marshal(*cjr) 84 if err != nil { 85 return nil, err 86 } 87 88 req, err := http.NewRequest("POST", 89 c.BaseURL+"/api/convert/folder/"+folderID+"/"+du.JobID, 90 bytes.NewReader(buf)) 91 if err != nil { 92 return nil, err 93 } 94 req.Header.Add(HeaderAuthTokenName, c.Auth.Token) 95 resp, err := c.Client.Do(req) 96 if err != nil { 97 return nil, err 98 } 99 defer resp.Body.Close() // ignore error 100 101 var dc endpoint.DocumentConversionModel 102 103 msg, err := ioutil.ReadAll(resp.Body) 104 if err != nil { 105 return nil, err 106 } 107 err = json.Unmarshal(msg, &dc) 108 if err != nil { 109 return nil, errors.New(trimErrors(string(msg))) 110 } 111 112 return &dc, nil 113 } 114 */ 115 116 // LoadFile uploads and converts a file into Documize, returning a fileID and error. 117 func (c *Client) LoadFile(folderID, targetFile string) (*entity.Document, error) { 118 file, err := os.Open(targetFile) // For read access. 119 if err != nil { 120 return nil, err 121 } 122 cv, err := c.upload(folderID, targetFile, file) 123 if err != nil { 124 return nil, err 125 } 126 //cv, err := c.convert(folderID, job, nil) 127 //if err != nil { 128 // return nil, err 129 //} 130 return cv, nil 131 }