Në një aplikacion meteor cila është mënyra më e mirë për të marrë imazhe nga aws s3? Kam provuar tre mënyra, por të gjitha kanë probleme.
Metoda 1: Zgjidhje e zakonshme
Problemi: Etiketa img ngarkohet me vargun http://s3.amazonaws.com/etc...
përpara se të futet {{copies.original.key}}
. Kjo tregon një ikonë të thyer të imazhit ndërsa imazhi ngarkohet.
client.js
Template.newProduct.helpers({
'image': function(){
newImages = // logic here;
return Images.find({'_id':{'$in':newImages}});
}
});
template.html
<template name="newProduct">
{{#each image}}
<img src="http://s3.amazonaws.com/etc...{{copies.original.key}}">
{{/each}}
</template>
Metoda 2: Lloko mbi çdo imazh, merrni url-në dhe shërbejeni atë në një grup për të ndezur {{#each image}}
Problemi: Sa herë që shtohet një imazh, ky funksion ekzekutohet përsëri dhe imazhet duhet të ringarkohen. Duke shkaktuar një dridhje të gjatë ndërsa përditësohet. Unë vetëm dua të ngarkoj imazhin e ri.
client.js
Template.newProduct.helpers({
'image': function(){
newImages = // logic here;
x = Images.find({'_id':{'$in':newImages}});
var returnArray = [];
for(i=0;i<x.count();i++){
stringResult = "http://s3.amazonaws.com/etc..." + x.fetch()[i].copies.original.key;
returnArray.push(stringResult);
}
return returnArray;
}
});
template.html
<template name="newProduct">
{{#each image}}
<img src="{{this}}">
{{/each}}
</template>
Metoda 3: Gjatë ngarkimit të skedarit përdorni js për të ndërtuar një etiketë imazhi dhe për ta shtuar atë në faqe.
Problemi: Kur ngarkoni imazhe nga një uebsajt tjetër në këtë mënyrë, shkakton një gabim 403 (të ndaluar). Ju nuk mund të ngarkoni imazhe të tilla në fluturim.
'change .in': function(ev, t) {
FS.Utility.eachFile(ev, function(file) {
Images.insert(file, function (e,f) {
if (!e){
$('#imageShack').append($('<img />').attr('src', 'http://s3.amazonaws.com/etc..' + f._id + '-' + f.original.name));
}
});
});
}