必要な npm パッケージは aws-sdk
, file-type
, piexif
S3.getObject
でデータ取得して、file-type
で JPEG 画像かチェックして、piexif
で EXIF を削除して、S3.putObject
で書き戻す感じです。
constAWS=require('aws-sdk');constFyleType=require('file-type');constpiexif=require('piexif');constremoveExif=(region,bucket,key)=>{constS3=newAWS.S3({region:region});returnPromise.resolve({Bucket:bucket,Key:key}).then(params=>S3.getObject(params).promise()).then(data=>newPromise(async(resolve,reject)=>{// mime type のチェックconstfileInfo=awaitFyleType.fromBuffer(data.Body);if(fileInfo.mime==='image/jpeg'){data.ContentType=fileInfo.mime;resolve(data);}else{reject(Error("It's not jpeg format."));}})).then(data=>newPromise((resolve,reject)=>{// EXIF 情報の削除try{constnewBody=piexif.remove(data.Body.toString('binary'));resolve({Bucket:bucket,Key:key,ContentType:data.ContentType,Body:Buffer.from(newBody,'binary')});}catch(err){reject(err);}})).then(params=>S3.putObject(params).promise()).then(data=>Promise.resolve(data)).catch(err=>Promise.reject(err));}
Lambda ファンクションとして動くようにして、PUT のタイミングで EXIF 情報を削除するとか、Lambda@Edge で動くようにして EXIF 情報を秘匿するとかのサンプルにしてください。
Lambda@Edge で画像ファイルに対するレスポンスを編集するためのサンプルとしては HM さんのも参考になるかも
https://github.com/humanmade/tachyon