ysugimoto / aws-lambda-image

Automatic image resize/reduce on AWS Lambda
MIT License
824 stars 219 forks source link

Preserve file path in latest version #180

Closed tusharvikky closed 5 years ago

tusharvikky commented 5 years ago

Hello,

File uploaded in foo/bar/image.png then it would be best if the resized images were added to /resized/small/foo/bar/image.png instead of the current behavior of putting it in foo/bar/resized/image.png

Hello @ysugimoto I was trying to replicate this in latest build. But couldn't get it to work.

Any help would be great.

Earlier issue #59

ysugimoto commented 5 years ago

Hi @tusharvikky , I'll investigate that.

BTW, can I see your configuration, please?

tusharvikky commented 5 years ago

Hey,

I was using the sample config. But my path of file upload is images/<someid>/<someid2>/timestamp.jpg

I have a S3 event handler in place on images folder.

Current output with below config: reduced/timestamp.jpg and resized/500-jpeg/timestamp.jpg

I'm expecting: reduced/images/<someid>/<someid2>/timestamp.jpg -> Reduction block, I have added an absolute path of reduced. resized/500-jpeg/images/<someid>/<someid2>/timestamp.jpg -> resized/500-jpeg added as absolute.

{
  "bucket": "bucketprod1-s01",
  "reduce": {
      "directory": "reduced",
      "quality": 70,
      "acl": "public-read",
      "cacheControl": "public, max-age=31536000"
  },
  "resizes": [
    {
      "size": 500,
      "directory": "resized/500-jpeg",
      "format": "jpg",
      "background": "white",
      "changeExtension": true
    }
  ]
}
tusharvikky commented 5 years ago

@ysugimoto Did you got the time to look into this?

ysugimoto commented 5 years ago

@tusharvikky Hi, I'm late.

I tested with the following config:

{
  "bucket": "testing-bucket",
  "reduce": {
      "directory": "./reduced",
      "quality": 90,
      "acl": "public-read",
      "cacheControl": "public, max-age=31536000"
  },
  "resizes": [
    {
      "size": 600,
      "directory": "./resized/600-jpeg",
      "format": "jpg",
      "background": "white",
      "changeExtension": true
    },
    {
      "size": 600,
      "directory": "/root/resized/600-jpeg",
      "format": "jpg",
      "background": "white",
      "changeExtension": true
    },
    {
      "size": 500,
      "directory": "resized/500-jpeg",
      "format": "jpg",
      "background": "white",
      "changeExtension": true
    }
  ]
}

And uploaded to original/example.png which is set S3 event. Then Lambda logs are:

Downloading: original/example.png
Reducing to: ./reduced
Uploading to: original/reduced/example.png (77141 bytes)
Resizing to: ./resized/600-jpeg
Reducing to: ./resized/600-jpeg
Uploading to: original/resized/600-jpeg/example.jpg (16881 bytes)
Resizing to: /root/resized/600-jpeg
Reducing to: /root/resized/600-jpeg
Uploading to: /root/resized/600-jpeg/example.jpg (16881 bytes)
Resizing to: resized/500-jpeg
Reducing to: resized/500-jpeg
Uploading to: resized/500-jpeg/example.jpg (12297 bytes)

It works as expected, I think. Because this package deals with image the only filename, not dealing directory of a filename. So if you want to consider about uploaded directory like <someId>, probably this pakcage should improve for dealing it.

tusharvikky commented 5 years ago

@ysugimoto I'm a beginner in nodeJS, if you can point me out on how I can get it done, I can raise a pull request.

ysugimoto commented 5 years ago

@tusharvikky Sorry for the late reply.

Well, now processed image path is generated at here, so you can deal with image directory someways.

I think it's better to add more option like keepDirectoryPath or something and treat file path by that option value is true or not for backward compatibility.

@kdybicz If you have any suggestions, plz tell us.

ysugimoto commented 5 years ago

if we don't have any progress, close temporarily.