2016-11-21 108 views
0

我使用aws-sdk module將文件上傳到S3。我用uuid來表示每個文件。S3在上傳時設置文件名

我的問題是 - 如何設置真正的文件名(不是uuid),所以當我從S3下載密鑰時 - 將要下載的文件將被命名爲真實文件名?

我讀過有關內容處置頭,但我認爲這僅僅是下載請求,我想這樣做對上傳請求

當前的代碼是:

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

Ad Frederic建議,Content-Disposition header將完成這項工作。然而,我強烈建議使用庫,用於構建該頭(如處理支持不同的標準,最大的問題不同的平臺時,它會饒你很多麻煩 - !編碼

有很大的庫來實現它 - 叫... 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

謝謝,我會試試這個 –