首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用Meteor Edgee:SlingShot包时修改上传前的文件名

如何在使用Meteor Edgee:SlingShot包时修改上传前的文件名
EN

Stack Overflow用户
提问于 2017-03-05 23:37:54
回答 1查看 278关注 0票数 1

请我正在尝试修改由用户发布的选定文件的文件名,然后再上传到亚马逊S3使用edgee:slinghot包。我可以很好地上传文件,但问题是我如何修改文件名。我在客户机上使用修改了它,将修改后的名称保存到一个变量中。我现在的问题是如何在服务器环境中访问客户端声明和保存的变量。我就是想不通。

代码语言:javascript
复制
    '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');

    }

上传文件的代码。

代码语言:javascript
复制
 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);

}

代码语言:javascript
复制
 export default function(event , template , folder ,div , progress){
   return _slingShotUploadConfigure(event , template , folder,div , progress)
 }

然后,我从‘../../ studentFileUpload /handle-fileuploads’中将模块作为句柄导入;下面是用于上传的meteor-slingshot代码

代码语言:javascript
复制
   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是保存修改后的文件名的变量。如何从服务器环境访问它。任何帮助都是非常感谢的。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-06 15:12:15

您可以使用metacontext将额外的信息传递给slingshot:

代码语言:javascript
复制
metacontext = {newName: "foo"};
let _upload = new Slingshot.Upload(folder,metacontext);

然后,您可以在key函数中访问该元上下文:

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42610307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档