如何使用 UploadCare 获取上传图像的自定义存储文件名?

How can I get the custom storage filename for uploaded images using UploadCare?

我想用自己的S3存储,显示刚刚上传的图片。如何获取上传到 S3 的文件名? 例如,我可以将 jpg 图像上传到 UploadCare。 这是我可以获得的输出: fileInfo.cdnUrl: "https://ucarecdn.com/6314bead-0404-4279-9462-fecc927935c9/" fileInfo.name: "0 (3).jpg"

但是如果我检查我的 S3 存储桶,这是实际上传到 S3 的文件名:https://localdevauctionsite-us.s3.us-west-2.amazonaws.com/6314bead-0404-4279-9462-fecc927935c9/03.jpg

这是我目前的 javascript:

var widget = uploadcare.Widget('[role=uploadcare-uploader]');
widget.onChange(group => {
  group.files().forEach(file => {
    file.done(fileInfo => {
      // Try to list the file from aws s3
      console.log('CDN url:', fileInfo.cdnUrl);
      //https://uploadcare.com/docs/file_uploader_api/files_uploads/
      console.log('File name: ', fileInfo.name);
    });
  });
});

文件名在复制到 S3 之前经过清理,因此输出文件名只能包含以下字符:

abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_

以下函数可用于获取经过清理的文件名:

function sanitize(filename) {
  var extension = '.' + filename.split('.').pop();
  var name = filename.substring(0, filename.length - extension.length);
  return name.replace(/[^A-Za-z0-9_]+/g, '') + extension;
}

最终的 S3 URL 可以由 S3 基础 URL、文件 UUID(您可以从 fileInfo 对象中获取)和上传的经过清理的名称组成文件。