From 1c2fec81823f9b363f785b84705d8d4ee70b3ade Mon Sep 17 00:00:00 2001 From: Denis Kirillov Date: Tue, 19 Apr 2022 15:02:18 +0300 Subject: [PATCH] [#147] Download zip by FilePath attribute Signed-off-by: Denis Kirillov --- downloader/download.go | 10 ++++++---- integration_test.go | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/downloader/download.go b/downloader/download.go index 03fce82..554987f 100644 --- a/downloader/download.go +++ b/downloader/download.go @@ -36,6 +36,8 @@ type request struct { var errObjectNotFound = errors.New("object not found") +const attributeFilePath = "FilePath" + func isValidToken(s string) bool { for _, c := range s { if c <= ' ' || c > 127 { @@ -374,7 +376,7 @@ func (d *Downloader) DownloadZipped(c *fasthttp.RequestCtx) { return } - resSearch, err := d.search(c, containerID, object.AttributeFileName, prefix, object.MatchCommonPrefix) + resSearch, err := d.search(c, containerID, attributeFilePath, prefix, object.MatchCommonPrefix) if err != nil { log.Error("could not search for objects", zap.Error(err)) response.Error(c, "could not search for objects", fasthttp.StatusBadRequest) @@ -428,7 +430,7 @@ func (d *Downloader) DownloadZipped(c *fasthttp.RequestCtx) { } w, err = zipWriter.CreateHeader(&zip.FileHeader{ - Name: getFilename(&resGet.Header), + Name: getZipFilePath(&resGet.Header), Method: compression, Modified: time.Now(), }) @@ -474,9 +476,9 @@ func (d *Downloader) DownloadZipped(c *fasthttp.RequestCtx) { } } -func getFilename(obj *object.Object) string { +func getZipFilePath(obj *object.Object) string { for _, attr := range obj.Attributes() { - if attr.Key() == object.AttributeFileName { + if attr.Key() == attributeFilePath { return attr.Value() } } diff --git a/integration_test.go b/integration_test.go index e1d15ae..174db56 100644 --- a/integration_test.go +++ b/integration_test.go @@ -28,6 +28,8 @@ import ( "github.com/testcontainers/testcontainers-go/wait" ) +const attributeFilePath = "FilePath" + type putResponse struct { CID string `json:"container_id"` OID string `json:"object_id"` @@ -191,8 +193,8 @@ func getByAttr(ctx context.Context, t *testing.T, clientPool *pool.Pool, CID *ci func getZip(ctx context.Context, t *testing.T, clientPool *pool.Pool, CID *cid.ID) { names := []string{"zipfolder/dir/name1.txt", "zipfolder/name2.txt"} contents := []string{"content of file1", "content of file2"} - attributes1 := map[string]string{object.AttributeFileName: names[0]} - attributes2 := map[string]string{object.AttributeFileName: names[1]} + attributes1 := map[string]string{attributeFilePath: names[0]} + attributes2 := map[string]string{attributeFilePath: names[1]} putObject(ctx, t, clientPool, CID, contents[0], attributes1) putObject(ctx, t, clientPool, CID, contents[1], attributes2)