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  }