Wystąpił problem podczas próby przesłania pliku do mojego zasobnika S3. Wszystko działa z wyjątkiem tego, że moje parametry plików nie wydają się odpowiednie. Korzystam z Amazon S3 sdk, aby przesłać z nodejs do s3.Załaduj plik do Amazon S3 z NodeJS
Są to moje ustawienia trasy:
var multiparty = require('connect-multiparty'),
multipartyMiddleware = multiparty();
app.route('/api/items/upload').post(multipartyMiddleware, items.upload);
Jest items.upload function():
exports.upload = function(req, res) {
var file = req.files.file;
var s3bucket = new AWS.S3({params: {Bucket: 'mybucketname'}});
s3bucket.createBucket(function() {
var params = {
Key: file.name,
Body: file
};
s3bucket.upload(params, function(err, data) {
console.log("PRINT FILE:", file);
if (err) {
console.log('ERROR MSG: ', err);
} else {
console.log('Successfully uploaded data');
}
});
});
};
Ustawianie Body
param na sznurku jak "hello"
działa dobrze. Zgodnie z doc, parametrmusi przyjmować dane obiektu (Bufor, Tablica Typowa, Blob, Ciąg, OdczytywanyStream). Jednak przesyłając obiekt pliku nie powiedzie się z następującym komunikatem o błędzie:
[Error: Unsupported body payload object]
Jest to obiekt pliku:
{ fieldName: 'file',
originalFilename: 'second_fnp.png',
path: '/var/folders/ps/l8lvygws0w93trqz7yj1t5sr0000gn/T/26374-7ttwvc.png',
headers:
{ 'content-disposition': 'form-data; name="file"; filename="second_fnp.png"',
'content-type': 'image/png' },
ws:
{ _writableState:
{ highWaterMark: 16384,
objectMode: false,
needDrain: true,
ending: true,
ended: true,
finished: true,
decodeStrings: true,
defaultEncoding: 'utf8',
length: 0,
writing: false,
sync: false,
bufferProcessing: false,
onwrite: [Function],
writecb: null,
writelen: 0,
buffer: [],
errorEmitted: false },
writable: true,
domain: null,
_events: { error: [Object], close: [Object] },
_maxListeners: 10,
path: '/var/folders/ps/l8lvygws0w93trqz7yj1t5sr0000gn/T/26374-7ttwvc.png',
fd: null,
flags: 'w',
mode: 438,
start: undefined,
pos: undefined,
bytesWritten: 261937,
closed: true },
size: 261937,
name: 'second_fnp.png',
type: 'image/png' }
Każda pomoc będzie bardzo mile widziane!
Serwer tylko trzeba przechowywać AWS sekrety tworzenia S3-zarejestrowany adres URL (za pomocą aws-sdk). Klient pobiera podpisany adres URL, każde przesłanie, a następnie stanie się stroną klienta przy użyciu tego adresu URL. Sprawdź ten przewodnik: https://devcenter.heroku.com/articles/s3-upload-node – rocketspacer