2016-05-12 24 views
1

Ich sende meine Datei über das Frontend an einen s3-Bucket, da das von dem, was ich gelesen habe, effizienter scheint.Wie legt man einen eindeutigen aws S3-Dateinamen fest?

Aber für einige mein schema/Sammlungen, ich werde nicht die ID hat, für die die Datei/Foto zugeordnet ist - wie sie zur gleichen Zeit wie der Upload erstellt werden:

$scope.add = function(){ 

    if($scope.file.photo){ 
     $scope.distiller.photo = 'http://s3.amazonaws.com/whiskey-upload/distillers/' 
     + ' needs to be assigned to guid or collection id' 
     Distillery.create($scope.distiller).then(function(res){ 
      console.log(res); 
      $scope.distillers.push(res.data.distiller); 
     var files = $scope.file; 
     var filename = files.photo.$ngfName; 
     var type = files.type; 
     var folder = 'distillers/'; 

     var query = { 
      files: files, 
      folder: folder, 
      filename: res.data.distiller._id, 
      type: type 
     }; 

     Uploads.awsUpload(query).then(function(){ 
      $scope.distiller = {}; 
      $scope.file = {}; 
     }); 
    }); 
    } 
    else{ 
    Distillery.create($scope.distiller).then(function(res){ 
     toastr.success('distillery created without photo'); 
     $scope.distiller = {}; 
    }); 
    } 
    }; 

Des Der obige Code würde nicht funktionieren, es sei denn, ich habe ein Update über das Versprechen von aws.Upload gesendet, nachdem das Destillerieobjekt erstellt wurde und nachdem die Datei nach s3 hochgeladen wurde.

Das scheint nicht effizient.

Ich könnte eine GUID erstellen und diese dem Namen der s3-Datei zuweisen, und auch eine Referenz davon auf dem Distillery-Objekt behalten. Dies scheint jedoch hacky.

Beispiel Guid Schöpfer:

function guid() { 
    function s4() { 
    return Math.floor((1 + Math.random()) * 0x10000) 
     .toString(16) 
     .substring(1); 
    } 
    return s4() + s4() + '-' + s4() + '-' + s4() + '-' + 
    s4() + '-' + s4() + s4() + s4(); 
} 

Was wäre die sauberste Weg zu erreichen, was ich will?

+0

Möglicherweise möchten Sie schauen ein Paket wie fineuploader – dkarchmer

Antwort

2

Ein guter GUID-Generator ist ein sehr standardmäßiger Weg, um ein eindeutiges ID-Problem zu lösen. Abhängig vom Algorithmus könnte die Wahrscheinlichkeit einer Namenskollision nahe Null sein. Wie Sie wissen, hat JavaScript keinen nativen, also ist einer wie Ihres vernünftig. Ich denke nicht, dass es Hacky ist.

ist hier ein anderer von @briguy37:

function generateUUID() { 
    var d = new Date().getTime(); 
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { 
     var r = (d + Math.random()*16)%16 | 0; 
     d = Math.floor(d/16); 
     return (c=='x' ? r : (r&0x3|0x8)).toString(16); 
    }); 
    return uuid; }; 
+0

wie nahe Null verwendet würde es sein? Lass uns sagen, ich hatte eine App wie Instagram? – NoobSter

+0

"Unter der Annahme einer einheitlichen Wahrscheinlichkeit für die Einfachheit würde die Wahrscheinlichkeit eines Duplikats bei etwa 50% liegen, wenn jede Person auf der Erde 2014 über 600 Millionen GUIDs verfügte." Nicht sicher, dass ich diese Wahrscheinlichkeit verstehe, aber es scheint niedrig. Weitere Informationen finden Sie unter de.wikipedia.org/wiki/Globally_unique_identifier. –

Verwandte Themen