使用AngularJS和ng文件上传保留文件重命名的原始格式

时间:2016-07-12 21:57:53

标签: javascript angularjs ng-file-upload

我正在使用ng-file-upload在网络应用中上传图片。

上传过程效果很好,但是当我尝试使用momentJS为每个文件指定一个唯一的名称时,它将不会自动保留格式并保存而不使用文件扩展名。

例如, image.jpg将成为12-07-2016-23-36-44

我设法使用以下代码修复此问题,但是它会将所有图像保存到JPG,即使它们不是(PNG,GIF ...)

$scope.uniquelogo = moment().format('DD-MM-YYYY-HH-mm-ss') + '.jpg';

Upload.upload({
   url: 'upload.php',
   data: {
    file: file,
    name: Upload.rename(file, $scope.uniquelogo)
   }

我如何使用Upload.rename()并保持原始文件格式?

2 个答案:

答案 0 :(得分:2)

您可以从原始文件名中检索扩展名,然后使用该扩展名而不是.jpg

function getFileExtension(filename) {
  return filename
    .split('.')    // Split the string on every period
    .slice(-1)[0]; // Get the last item from the split
}

$scope.uniquelogo = moment().format('DD-MM-YYYY-HH-mm-ss');

Upload.upload({
   url: 'upload.php',
   data: {
    file: file,
    name: Upload.rename(file, $scope.uniquelogo + getFileExtension(file.name))
   }
   ...

答案 1 :(得分:1)

您可以访问类型属性以获取扩展名例如:

  1. 图片/(JPEG | PNG)
  2. 视频/ MP4
  3. 因此,您可以使用string方法String.prototype.substring() + String.prototype.lastIndexOf()来获取您想要的部分:

    name: Upload.rename(file, $scope.uniquelogo + file.name.substring(file.type.lastIndexOf('/'), file.name.length).replace('/', '.'));
    

    注意:我使用替换方法替换"/"的{​​{1}},但您也可以手动执行(只需添加"."

    我希望它有所帮助!