使用Meteor Edgee:SlingShot软件包时如何在上传前修改文件名
请注意,在使用edgee:slinghot包上传到AmazonS3之前,我正在尝试修改用户发布的选定文件的文件名。我可以上传文件,但问题是如何修改文件名。 我通过将修改后的名称保存到变量中,在客户机上使用对其进行了修改。我现在的问题是如何在服务器环境中访问在客户机上声明和保存的变量。我就是不知道该怎么办使用Meteor Edgee:SlingShot软件包时如何在上传前修改文件名,meteor,meteor-slingshot,Meteor,Meteor Slingshot,请注意,在使用edgee:slinghot包上传到AmazonS3之前,我正在尝试修改用户发布的选定文件的文件名。我可以上传文件,但问题是如何修改文件名。 我通过将修改后的名称保存到变量中,在客户机上使用对其进行了修改。我现在的问题是如何在服务器环境中访问在客户机上声明和保存的变量。我就是不知道该怎么办 'change .js-submitTeamPaper' : function(event , template){ event.preventDefault();
'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');
}
上传文件的代码
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);
}
然后,我将模块作为studentFileUpload从“../../modules/handlefileuploads”导入;
下面是流星弹弓代码做上传
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;
}
});
从我的代码中,newFilename是保存修改后的文件名的变量。如何从服务器环境访问它。非常感谢您的帮助。谢谢您可以使用元上下文将额外信息传递给slingshot:
metacontext = {newName: "foo"};
let _upload = new Slingshot.Upload(folder,metacontext);
然后您可以在键
函数中访问该元上下文:
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;
}
你能发布你的
studentFileUpload
实现代码吗?您可能只需要在该函数中为新文件名添加一个额外参数。@jordanwillis我可以成功上载文件我只需要更改文件名我知道它正在工作,但在您共享studentFileUpload函数的代码之前,我们无法帮您。我假设这就是您的文件上传逻辑实际发生的地方,因此我们需要修改什么来更改文件名文件对象是只读的,我认为它无法修改。请参阅利用弹弓功能的更新答案。
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;
}