2016-11-21 19 views
0

aws-sdk moduleを使用してS3にファイルをアップロードしています。私は各ファイルを表すためにuuidを使います。アップロード時にS3ファイル名を設定しました

実際のファイル名(Uuidではありません)を設定するにはどうすればいいですか?S3からキーをダウンロードすると、ダウンロードされるファイルには実際のファイル名が付けられます。

Iは、Content-Dispositionヘッダーについて読んだが、私はこれが唯一のダウンロード要求であると思うし、私がアップロード要求

現在のコードでこれをしたいです:

var s3obj = new AWS.S3({ 
    params: { 
     Bucket: CONFIG.S3_BUCKET, 
     Key: key, 
     ContentType: type 
    } 
}); 

s3obj.upload({ 
    Body: fileData 
}).on('httpUploadProgress', function(evt) { 
    logger.debug('storing on S3: %s', evt); 
}).send(function(err, data) { 
    logger.debug('storing on S3: err: %s data: %s', err, data); 
    return callback(); 
}); 

ありがとう!

答えて

2

Content-Dispositionは、実際にファイルをs3(http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#upload-property)にアップロードするときに利用できます。そこにファイル名を追加することができます

s3obj.upload({ 
    Key: <the uuid>, 
    Body: fileData 
    ContentDisposition => 'attachment; filename="' + <the filename> + '"', 
}).on('httpUploadProgress', function(evt) { 
    logger.debug('storing on S3: %s', evt); 
}).send(function(err, data) { 
    logger.debug('storing on S3: err: %s data: %s', err, data); 
    return callback(); 
}); 
+0

私の愚かな愚か者は、それを見つけませんでした。ありがとう! –

1

アドフレドリックは、Content-Dispositionヘッダーを実行します。しかし、私はこのヘッダーを構築するためにライブラリを使用することを強くお勧めします(さまざまな標準と最大の問題をサポートするさまざまなプラットフォームを扱う際に多くのトラブルを抱えてしまうので) - エンコード

達成するための素晴らしいライブラリがあります - content-disposition :)と呼ばれています。単純な使用法は次のようになります:

const contentDisposition = require('content-disposition'); 
return this.s3.upload({ 
    ACL: 'private', // Or whatever do you need 
    Bucket: someBucket, 
    ContentType: mimeType, // It's good practice to set it to a proper mime or to application/octet-stream 
    ContentDisposition: contentDisposition(fileName, { 
     type: 'inline' 
    }), 
    Key: someKey, 
    Body: someBody 
    }); 
} 
+0

ありがとう、私はこれを試してみる –

関連する問題