Pupload переименование файла

Я использую Plupload для загрузки на S3; Моя проблема в том, что я хочу изменить имена файлов, поэтому, когда они будут находиться в S3, они будут изменены на нужный мне формат. Мне удалось получить имя файла файлов, загруженных функцией:

 FilesAdded: function (up, files) {
                    for (var i in files) {
                        files[i].name = files[i].name.split('_').join(' ').trim();
                        alert('Selected files: ' + files[i].name);

                    }

имя файла меняется в элементе управления, но когда я проверяю S3, файл не меняется.

Я убедился, что свойство unique_names имеет значение false, и переименовал свойство в true; но не помогло?


person ibininja    schedule 18.12.2012    source источник
comment
У меня та же проблема. Однако с моим кодом кажется, что некоторые файлы переименованы, а другие сохраняют свое первоначальное имя.   -  person Tim B James    schedule 17.01.2013
comment
Еще одно предложение здесь http://stackoverflow.com/questions/6534734/plupload-filename-problem/35477481#35477481   -  person caglaror    schedule 18.02.2016


Ответы (4)


Я столкнулся с той же проблемой, т.е. использовал pluploader для S3 и хотел нормализовать имена файлов перед загрузкой. К сожалению, параметр «Файлы» доступен только для чтения, и любые изменения имени файла не отображаются в отправленной форме.

Но если мы изменим параметр «ключ» на точную строку (нормализованное имя), это заставит S3 сохранить его под другим именем. Мы можем создать нормализованное имя и использовать его в параметре 'key' в multipart_param в обратном вызове 'FileAdded'.

....
FilesAdded: function(up, files) {
  console.log("Uploader.FilesAdded ", up, files);

  var file = files[0];

  //Replace unwanted characters with "_"
  var new_name = file.name.replace(/[^a-z0-9\.]+/gi,"_").toLowerCase();

  console.log("Changing file name to ", file.name);

  //Create multipart_params here (or just set the 'key' and 'Filename')
  var multipart_params =  {
    'key': config.key + new_name, // *instead of ${filename}
    'Filename':  config.key + new_name,
    'acl': config.acl,
    'Content-Type': '',
    'AWSAccessKeyId' : config.accessId,
    'policy': config.policy,
    'signature': config.signature
  };

 //
 up.settings.multipart_params = multipart_params;
}
....
person droider    schedule 23.02.2014

У меня было требование добавить определяемый пользователем префикс ко всем файлам в очереди загрузки непосредственно перед выполнением многокомпонентной загрузки на S3. В моем случае префикс можно было отредактировать в любой момент до начала загрузки, поэтому использование события FilesAdded было неприемлемо.

Решение, которое сработало для меня, состояло в том, чтобы использовать BeforeUpload, который срабатывает для каждого файла в очереди непосредственно перед началом загрузки.

 BeforeUpload: function(up, file) {

     //Change the filename          
     file.name = appendUniqueId(file.name);
     file.name = addPrefix(file.name);

     var params = up.settings.multipart_params;
     params.key = file.name;
     params.Filename = file.name;

 }
person Collie    schedule 10.11.2017

Попробуйте с unique_names:true с переименованием:true. Меня устраивает.

person Mahbub    schedule 18.12.2012
comment
по какой-то причине у меня это не сработало ... может быть, это «Ключ: $ {имя файла}» в multipart_params? - person ibininja; 18.12.2012

Единственное полностью работающее решение этой проблемы, которое я нашел, — это использовать свойство multipart_params в загрузчике Plupload.

Я использую код;

uploader.bind('BeforeUpload', function (up, file) {
    uploader.settings.multipart_params = { 'renamedFileName': 'yourRenamedFileName' };
});

Затем, когда вы обрабатываете свое изображение, вы можете запросить его из размещенной информации;

код С#

var renamedFileName = context.Request["renamedFileName"].ToString();

Для вашего кода вы можете попробовать;

uploader.bind('BeforeUpload', function (up, file) {
    uploader.settings.multipart_params = { 'renamedFileName': file.name.split('_').join(' ').trim(); };
});

Затем вы можете использовать эту дополнительную информацию для переименования файла на вашем сервере.

person Tim B James    schedule 17.01.2013
comment
Спасибо за ответ; однако я использую S3; поэтому я не думаю, что смогу использовать этот атрибут. Похоже, единственный способ - изменить имя файла после того, как он каким-то образом загружен ... еще раз спасибо - person ibininja; 17.01.2013
comment
Еще одно предложение здесь stackoverflow.com/questions/6534734/plupload-filename -проблема/ - person caglaror; 18.02.2016
comment
Это действительно лучший ответ и, вероятно, правильный способ сделать это. @ibininja с S3 вы просто используете up.settings.multipart_params.key = 'filename' вместо переопределения всего объекта. По какой-то причине это работает и дает правильный результат только в событии BeforeUpload. Посмотрите на пример @ Collie для вашего конкретного сценария. - person ; 15.03.2018