aboutsummaryrefslogtreecommitdiff
path: root/object.go
diff options
context:
space:
mode:
authorStefan Majewsky <majewsky@gmx.net>2018-02-19 15:03:56 +0100
committerStefan Majewsky <majewsky@gmx.net>2018-02-19 15:03:56 +0100
commit502acc3c73e789e856a17b878889db4356fe898c (patch)
treef3d48ed5d6dd950bc2c3c4a9e2a6cc670a7c8034 /object.go
parent1a84987c7e28094f4e65bfb0fa03fdf5059ef6cc (diff)
downloadgo-schwift-502acc3c73e789e856a17b878889db4356fe898c.tar.gz
add Object.Download(), DownloadedObject
Diffstat (limited to 'object.go')
-rw-r--r--object.go32
1 files changed, 31 insertions, 1 deletions
diff --git a/object.go b/object.go
index a2a68e1..83ada1d 100644
--- a/object.go
+++ b/object.go
@@ -262,5 +262,35 @@ func (o *Object) Invalidate() {
o.headers = nil
}
-//TODO Object.Copy(), Object.Move(), Object.Download()
+//Download retrieves the object's contents using a GET request. This returns a
+//helper object which allows you to select whether you want an io.ReadCloser
+//for reading the object contents progressively, or whether you want the object
+//contents collected into a byte slice or string.
+//
+// reader, err := object.Download(nil, nil).AsReadCloser()
+//
+// buf, err := object.Download(nil, nil).AsByteSlice()
+//
+// str, err := object.Download(nil, nil).AsString()
+//
+func (o *Object) Download(headers ObjectHeaders, opts *RequestOptions) DownloadedObject {
+ resp, err := Request{
+ Method: "GET",
+ ContainerName: o.c.name,
+ ObjectName: o.name,
+ Headers: headersToHTTP(headers),
+ Options: opts,
+ ExpectStatusCodes: []int{200},
+ }.Do(o.c.a.client)
+ if err == nil {
+ headers := ObjectHeaders(headersFromHTTP(resp.Header))
+ err = headers.Validate()
+ if err == nil {
+ o.headers = &headers
+ }
+ }
+ return DownloadedObject{resp.Body, err}
+}
+
+//TODO Object.Copy(), Object.Move()
//TODO provide a companion to Object.Upload() to connect it with content-generating functions where an io.Writer needs to be given