2015-10-30 29 views
7

Voglio caricare immagini su server web amazon e per questo sto usando aws-sdk con nodejs.usando aws-sdk per caricare immagini su s3 usando nodejs

Sono in grado di caricare immagini nel bucket s3, ma quando faccio clic sull'URL per accedervi ottengo l'errore di accesso negato.

Ecco la mia configurazione

 var AWS = require('aws-sdk'); 

    //aws credentials 
    AWS.config = new AWS.Config(); 
    AWS.config.accessKeyId = "<access_key>"; 
    AWS.config.secretAccessKey = "<secret_key>"; 
    AWS.config.region = "ap-southeast-1"; 
    AWS.config.apiVersions = { 
     "s3": "2006-03-01" 
    } 

    var s3 = new AWS.S3(); 

    var bodystream = fs.createReadStream(req.files.pic.path); 

    var params = { 
     'Bucket': '<bucket_name>', 
     'Key': 'uploads/images/' + req.files.pic.name, 
     'Body': bodystream, 
     'ContentEncoding': 'base64', 
     'ContentType ': 'image/jpeg' 
    }; 

    //also tried with s3.putObject 
    s3.upload(params, function(err, data){ 
     console.log('after s3 upload====', err, data); 
    }) 

Immagini sta caricando con successo ma il loro tipo di contenuto è l'applicazione/ottetto. Inoltre, penso che ci sia qualche problema di autorizzazione, perché quando aggiungo una nuova autorizzazione posso scaricare l'immagine ma non riesco a vederla.

Puoi dirmi cosa c'è che non va in questa configurazione e voglio anche conoscere la differenza tra il metodo s3.upload e s3.putObject.

risposta

3

Al fine di specificare Content-Type intestazione è necessario definire Metadata sezione:

var params = { 
    'Bucket': '<bucket_name>', 
    'Key': 'uploads/images/' + req.files.pic.name, 
    'Body': bodystream, 
    'ContentEncoding': 'base64', 
    Metadata: { 
     'Content-Type': 'image/jpeg' 
    } 

}; 
+0

ottenere questo errore se provo a specificare il contenuto-tipo in questo modo { [SignatureDoesNotMatch: La firma richiesta abbiamo calcolato non lo fa corrisponde alla firma che hai fornito. Controlla la tua chiave e il metodo di firma.] Messaggio : "La firma richiesta che abbiamo calcolato non corrisponde alla firma che hai fornito. Controllare la chiave e il metodo di firma ', codice: ' SignatureDoesNotMatch', tempo: Ven Ott 30, 2015 12:55:30 GMT + 0530 (IST), statusCode: 403, reversibile: false, retryDelay: 30 } –

+0

@BhushanGoel Ho corretto il codice, ho dimenticato il trattino in 'content-type' –

+0

sì, ha funzionato, ora nella console s3 posso vederlo nei metadati: x-amz-meta-content-type: image/png –

Problemi correlati