我正在努力更新 Jquery 文件上传插件,因此当您上传文件时,它只会覆盖具有相同名称的现有文件,而不是使用 upcount 重命名它。
我已应用此链接中涵盖的更改:https ://github.com/blueimp/jQuery-File-Upload/issues/1965
但我似乎无法覆盖这个插件来让它工作?
这里有一个尚未回答的现有问题:jQuery File Upload by bluimp,如何替换而不是重命名
对此的任何指导将不胜感激。
我正在努力更新 Jquery 文件上传插件,因此当您上传文件时,它只会覆盖具有相同名称的现有文件,而不是使用 upcount 重命名它。
我已应用此链接中涵盖的更改:https ://github.com/blueimp/jQuery-File-Upload/issues/1965
但我似乎无法覆盖这个插件来让它工作?
这里有一个尚未回答的现有问题:jQuery File Upload by bluimp,如何替换而不是重命名
对此的任何指导将不胜感激。
如果您使用 wiki 中存在的 UploadHandler.php,这很简单。在 get_file_name 方法中,您应该替换此行:
return $this -> get_unique_filename($this -> trim_file_name($name, $type, $index, $content_range), $type, $index, $content_range);
有了这个:
return $this -> trim_file_name($name, $type, $index, $content_range);
MKoosej修复的2016 年更新!在UploadHandler.php → protected function get_file_name ...替换
return $this->get_unique_filename(
$file_path,
$this->fix_file_extension($file_path, $name, $size, $type, $error,
$index, $content_range),
$size,
$type,
$error,
$index,
$content_range
);
和
return $this -> trim_file_name($file_path, $name, $size, $type, $error, $index, $content_range);
我需要相同的文件覆盖选项。
使用 PHP UploadHandler.php 文件,我做了一个非常适合我的快速破解。我确信有更好的方法,但这可能对其他人有所帮助。
查找处理程序“upcount_name_callback”并将返回语句替换为取出的(索引)编号。我留下了原始的退货声明,以防我需要回去:)
protected function upcount_name_callback($matches) {
$index = isset($matches[1]) ? intval($matches[1]) + 1 : 1;
$ext = isset($matches[2]) ? $matches[2] : '';
return ''.$ext;
/* return ' ('.$index.')'.$ext; */
}
Anno 2018 这也可以工作(PHP 7.1):
class MyUploadHandler extends UploadHandler
{
public function __construct($options = array(), $initialize = true, $error_messages = null) {
$options += array(
'overwrite_existing' => true
);
parent::__construct($options, $initialize, $error_messages);
}
protected function get_unique_filename($file_path, $name, $size, $type, $error, $index, $content_range) {
if ($this->options['overwrite_existing'] ?? false) {
return $name;
}
return parent::get_unique_filename($file_path, $name, $size, $type, $error, $index, $content_range);
}
}
它避免了必须更改原始代码,然后可以将其用作库。
考虑 github 上的文档(此处)并向下滚动到“如何在上传的生命周期中将文件绑定到元素节点”的位置。这是代码:
$(function () {
$('#fileupload').fileupload({
dataType: 'json',
add: function (e, data) {
data.context = $('<p/>').text('Uploading...').appendTo(document.body);
data.submit();
},
done: function (e, data) {
data.context.text('Upload finished.');
}
});
});
注意完成的回调函数。如果展开数据对象,您会注意到有一个data.files对象和一个data.result对象。 data.result包含服务器上文件的名称。因此,基于上面给出的示例脚本,服务器上新上传的文件的名称是data.result.files[0].name 。
我希望这可以帮助别人
我尝试了@MKoosej 的解决方案。就我而言,它工作得很好,但我还编辑trim_file_name
了我让它只返回一个文件名的地方(我必须做一个上传器,将任何文件名转换为 data.csv)。此外,我必须制作其他版本的上传器,我应该重写文件名而不是重命名,但不同名称的不同文件应该保持不同。所以当我在那里尝试@MKoosej 解决方案时,它开始上传只有扩展名的文件,比如没有文件名的.jpeg。所以,我找到了这个解决方案:在 funcget_unique_filename
一开始我放了这个:
$oldName=$name;
并返回$oldName
而不是,$name
这很好。
只需在回调中执行 ajax 请求即可开始上传并从数据磁盘中删除文件。您可以使用 data.files[0].name 找到文件名。
然后,您只需使用旧链接搜索 tr,如下所示:
$("a[title='"+ data.files[0].name + "']").each(function () {
$(this).closest('tr').fadeOut();
});
并将其淡出。
问候