2017-03-05 2 views
1

Bitte versuchen Sie den Dateinamen einer ausgewählten Datei zu ändern, die von einem Benutzer vor dem Hochladen auf Amazon S3 mit dem Edgee: Slinghot-Paket. Ich kann die Datei ziemlich gut hochladen, aber das Problem ist, wie ändere ich den Dateinamen. Ich habe es auf dem Client geändert, indem ich den geänderten Namen in eine Variable speicherte. Mein Problem besteht nun darin, auf die Variable zuzugreifen, die auf dem Client in der Server-Umgebung deklariert und gespeichert wurde. Ich kann einfach nicht meinen Kopf darum drehen.So ändern Sie den Dateinamen vor dem Hochladen bei der Verwendung von Meteor Edgee: SlingShot Paket

'change .js-submitTeamPaper' : function(event , template){ 

     event.preventDefault(); 
     let paper = template.paperDetails.get(); 
     newFilename = paper[0].paper_name + "_" 
     _.map(paper[0].member , (member)=>{ 
     newFilename += "_" + member.regnum + "_" 
     }); 
     newFilename += paper[0]._id; 
     let file = event.target.value; 
     let fileArray = file.split("."); 
     let ext = fileArray[fileArray.length - 1]; 
     newFilename += "." + ext; 

    studentFileUpload(event , template , 'submitTeamTermPaper' , 'divProgress'); 

    } 

Der Code zum Hochladen der Datei.

let _collectfile = (event , template) =>{ 
    let file = event.target.files[0] 
    return file 
    } 

    let _showProgressBar = (div) => { 
    let _div = document.getElementById(div); 
    _div.classList.remove("hide"); 
    } 

let _closeProgressBar = (div) => { 
    let _div = document.getElementById(div); 
    _div.classList.add("hide"); 
} 

    let _slingShotUploadConfigure = (event , template , folder ,div) => { 
     let _upload = new Slingshot.Upload(folder); 
     let _file = _collectfile(event , template); 
     _showProgressBar(div); 
     _upload.send(_file , (error , downloadUrl) => { 
    template.uploader.set(); 
     if (error){ 
     //throw new Meteor.Error('500' , error.reason); 
     event.target.value = ''; 
     sAlert.error(error.reason , {effect: 'bouncyflip', 
     position: 'bottom-right', timeout: 3000, onRouteClose: false, stack: false, offset: '150px'}); 
     _closeProgressBar(div); 
    } 
    else{ 
     sAlert.success('File was uploaded successfully' , {effect: 'genie', 
     position: 'bottom-right', timeout: 3000, onRouteClose: false, stack: false, offset: '150px'}); 
     event.target.value = ''; 
     template.downloadUrl.set(downloadUrl); 
     _closeProgressBar(div); 
     //return downloadUrl; 
    } 
}); 
template.uploader.set(_upload); 

}

export default function(event , template , folder ,div , progress){ 
    return _slingShotUploadConfigure(event , template , folder,div , progress) 
} 

I dann das Modul als studentFileUpload von‘../../modules/handle-fileuploads' eingeführt werden; Unten ist der Meteor-Schleuder-Code den Upload

Slingshot.createDirective("submitTeamTermPaper", Slingshot.S3Storage, { 
    bucket: Meteor.settings.BucketName, 
    AWSAccessKeyId : Meteor.settings.AWSAccessKeyId, 
    AWSSecretAccessKey : Meteor.settings.AWSSecretAccessKey, 
    acl: "public-read", 

    authorize: function() { 
    // do some validation 
    // e.g. deny uploads if user is not logged in. 
     if (this.userId) { 
     return true; 
    } 
    }, 

    key: function (file) { 
    //file here is the file to be uploaded how do i get the modified file name i defined in the client as newFilename here 
    let timeStamp = + new Date; 
//let newFilename = file.name.replace(/_/g , "-"); 
return 'Team_Term_Papers/' + timeStamp + '_' + '_' + newFilename; 

} }) zu tun; Von meinem Code NewFilename ist die Variable, die den geänderten Dateinamen enthält. Wie kann ich von der Serverumgebung darauf zugreifen? Jede Hilfe wird wirklich geschätzt. Dank

+0

Können Sie Ihre 'studentFileUpload' Implementierung Code posten? Sie müssen nur ein zusätzliches Argument in dieser Funktion für den neuen Dateinamen hinzufügen. – jordanwillis

+0

@jordanwillis Ich kann die Datei erfolgreich hochladen Ich muss nur den Dateinamen ändern –

+1

Ich verstehe, dass es funktioniert, aber bis Sie den Code für StudentFileUpload-Funktion teilen, können wir Ihnen nicht helfen. Ich nehme an, das ist, wo Ihre Datei Upload-Logik tatsächlich stattfindet und daher, was wir ändern müssten, um den Dateinamen zu ändern – jordanwillis

Antwort

1

können Sie zusätzliche Informationen passieren Metakontext mit Schleuder:

metacontext = {newName: "foo"}; 
let _upload = new Slingshot.Upload(folder,metacontext); 

Dann können Sie diese Metakontext in Ihrer key Funktion zugreifen:

key: function (file,metacontext) { 
    let timeStamp = + new Date; 
    let newFilename = metacontext ? metacontext.newName : file.name; 
    newFilename = newFilename.replace(/_/g , "-"); 
    return 'Team_Term_Papers/' + timeStamp + '_' + '_' + newFilename; 
} 
+0

Das Dateiobjekt ist schreibgeschützt ich glaube nicht, dass es geändert werden kann. –

+0

Siehe aktualisierte Antwort, die eine Schleuderfunktion nutzt. –

Verwandte Themen