Javascript 重命名了通过Angularjs上传的文件
简而言之,我需要重命名通过Angular和Node上传的文件,并使新名称可用于后端和前端(我认为)。这样做的最佳实践是什么? 我正在Angularjs应用程序中使用文件上传插件()。上传点击Nodejs处理的路由,上传文件,成功后,angular将文件名保存到用户帐户中。但是,如果两个人上传一个同名的文件,就会发生冲突,因此我需要重命名每个文件(可能需要添加日期和时间) 我的代码如下所示:Javascript 重命名了通过Angularjs上传的文件,javascript,node.js,angularjs,file-upload,Javascript,Node.js,Angularjs,File Upload,简而言之,我需要重命名通过Angular和Node上传的文件,并使新名称可用于后端和前端(我认为)。这样做的最佳实践是什么? 我正在Angularjs应用程序中使用文件上传插件()。上传点击Nodejs处理的路由,上传文件,成功后,angular将文件名保存到用户帐户中。但是,如果两个人上传一个同名的文件,就会发生冲突,因此我需要重命名每个文件(可能需要添加日期和时间) 我的代码如下所示: Angular处理上传,点击节点可以使用的路由 节点将文件移动到位 成功后,angular将文件名保存到用
$scope.onFileSelect = function ($file) {
var photo = $file[0];
$scope.upload = $upload.upload({
url: '/upload/userphoto',
headers: {'Content-Type': photo.type},
file: photo,
method: 'POST'
}).progress(function (evt) {
//removed for brevity
}).success(function (data, status, headers, config) {
User.currentUser.user_profile_image = photo.name;
User.updateUser();
}).error(function (err) {
//removed for brevity
});
};
发布路径/upload/userphoto
在节点中与以下内容匹配:
exports.uploadProfilePhoto = function(req, res) {
var callbacks = {};
callbacks.uploadSuccess = function(){
res.json('success');
};
callbacks.uploadFailure = function(err){
//removed for brevity
};
user.handleUserImageUpload(req.files, callbacks);
};
设置一些回调,然后点击handleUserImageUpload()
,即:
this.handleUserImageUpload = function(params, callbacks) {
fs.readFile(params.file.path, function(err, data){
if(err){
callbacks.uploadFailure(err);
}
var newPath = path.resolve("./public/fileupload/userphotos/" + params.file.filename);
fs.writeFile(newPath, data, function(err) {
if(err){
callbacks.uploadFailure(err);
}
callbacks.uploadSuccess();
});
});
};
假设成功,我们将回到上面第一位Angular代码的成功处理程序。我知道我可以在handleUserImageUpload()
方法中使用fs.rename()
之类的方法重命名文件(只是一个硬编码的示例…我实际上会考虑文件类型和现有名称,并添加一个随机字符串或帐户标识符):
但是,当我将文件信息保存到用户帐户时,我没有可用的新名称。我想我可以在成功回调中传递回它?这是最好的方法还是我遗漏了什么?解决方案就是我所怀疑的。。。在回调中传递值。因此,我将以下内容添加到
handleUserImageUpload()
// grab the extension
var fileExtension = '.' + params.file.filename.split('.').pop();
// rename the file with a sufficiently random value and add the file extension back
var renamedFile = Math.random().toString(36).substring(7) + new Date().getTime() + fileExtension;
//set up the new path for use in fs.rename()
var renamedPath = path.resolve("./public/fileupload/userphotos/" + renamedFile);
// Make it so
fs.rename(newPath, renamedPath);
// pass the new name to the callback
callbacks.uploadSuccess(renamedFile);
在创建回调的函数中,uploadProfilePhoto()
,我需要做一个重要的更改,将json
交换为send
(否则我会在值中添加引号)
然后,我可以在Angular success处理程序中将此名称作为数据
值访问
// grab the extension
var fileExtension = '.' + params.file.filename.split('.').pop();
// rename the file with a sufficiently random value and add the file extension back
var renamedFile = Math.random().toString(36).substring(7) + new Date().getTime() + fileExtension;
//set up the new path for use in fs.rename()
var renamedPath = path.resolve("./public/fileupload/userphotos/" + renamedFile);
// Make it so
fs.rename(newPath, renamedPath);
// pass the new name to the callback
callbacks.uploadSuccess(renamedFile);
//res.json('success');
res.send(renamedFile);