2016-04-02 20 views
0

Ich benutze S3Direct zum Hochladen auf AWS S3, und es funktioniert gut. Wenn ich jedoch eine andere Datei mit demselben Namen hochlade, wird sie überschrieben. Ich habe Versionen aktiviert und jetzt speichert es die Datei mit einer anderen URL auf dem Server, aber die Referenz-URL in Django ist die gleiche, so dass ich am Ende zwei der zuletzt hochgeladenen Videos habe.Django S3Direct Umbenennen von Dateien

Ich habe versucht, dies zu dem Javascript hinzuzufügen, was nichts getan hat.

var getUploadURL = function(e) { 
    var el  = e.target.parentElement, 
     file  = el.querySelector('.file-input').files[0], 
     dest  = el.querySelector('.file-dest').value, 
     url  = el.getAttribute('data-policy-url'), 
     form  = new FormData(), 
     headers = {'X-CSRFToken': getCookie('csrftoken')} 

    /* These vars were added by me */ 
    var currentdate = new Date($.now()); 
     var datetime = currentdate.getDate() + "/" 
      + (currentdate.getMonth()+1) + "/" 
      + currentdate.getFullYear() + " @ " 
      + currentdate.getHours() + ":" 
      + currentdate.getMinutes() + ":" 
      + currentdate.getSeconds(); 

    form.append('type', file.type) 
    form.append('ext', file.datetime)/* Added by me */ 
    form.append('name', file.name) 
    form.append('dest', dest) 

Und dies in der Ansicht:

def get_upload_params(request): 
    /* The first two lines were already there */ 
    content_type = request.POST['type'] 
    filename = request.POST['name'] 
    print "Filename before time added: ", filename 
    ext = os.path.splitext(filename)[1] 
    name = os.path.splitext(filename)[0] 

    time_now = datetime.datetime.now().strftime("%Y-%m-%d+%H:%M:%S") 
    filename = name + time_now + ext 
    print "Filename after time added: ", filename 

Das zurückgekehrt, was ich im Terminal erwartet, aber der Dateiname in S3 übergeben das gleiche wie das Original, es war eine andere Version gerade erstellt haben. Und die URL, die an die Datenbank gesendet wurde, war die URL für den ursprünglichen Dateinamen und die Originalversion in S3.

Antwort

0

Ich habe es ausgearbeitet. Am unteren Rand der Ansicht in der sonst der get_upload_params()

time_now = datetime.datetime.now().strftime("%Y-%m-%dT%H-%M-%S") 
    key = '%s/${filename}%s' % (key, time_now) 

NB: Es kann nicht sein, Doppelpunkte (‚:‘) in der URL, weil S3 sie codiert in der db die URL Bedeutung gespeichert hat Doppelpunkte , und die tatsächliche URL nicht, so dass Sie nicht darauf verweisen können.