chromos33/dropzone

适用于CMS和前端表单的HTML5上传字段。

安装: 48

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 78

语言:JavaScript

类型:silverstripe-vendormodule

1.5.4 2024-04-14 22:06 UTC

README

#Fork of unclecheese dropzone just added SS5 requirement

SilverStripe的Dropzone

上传,更理智。

介绍

Dropzone模块提供了FileAttachmentField,一个健壮的HTML5上传接口,为SilverStripe提供,允许表单将文件上传保存到DataObject实例。

特性

  • 前端或CMS中,使用一个统一的界面进行上传
  • 拖放上传
  • 自动客户端缩略图生成
  • 网格视图/列表视图
  • 上传进度
  • 限制文件数量、文件大小、文件类型
  • 移除/删除文件的权限
  • 跟踪文件(移除未附加到任何内容的上传文件)
  • 无jQuery依赖

截图

网格视图

列表视图

移除/删除文件

优雅的错误处理

任何您喜欢的缩略图大小

使用方法

字段实例化方式与UploadField类似,以文件关系的名称和标签作为前两个参数。一旦实例化,有很多方法可以配置UI。

FileAttachmentField::create('MyFile', 'Upload a file')
  ->setView('grid')

如果包含上传字段的表单绑定到一个记录(即使用loadDataFrom()),那么如果关系是has_manymany_many,上传字段将自动允许多文件。如果表单未绑定到记录,您可以使用setMultiple(true)

使用imagesOnly()方法可以强制只进行图像上传。如果表单绑定到一个记录,并且关系指向Image类,这将自动设置。

更多高级选项

FileAttachmentField::create('MyFiles', 'Upload some  files')
  ->setThumbnailHeight(180)
  ->setThumbnailWidth(180)
  ->setAutoProcessQueue(false) // do not upload files until user clicks an upload button
  ->setMaxFilesize(10) // 10 megabytes. Defaults to PHP's upload_max_filesize ini setting
  ->setAcceptedFiles(array('.pdf','.doc','.docx'))
  ->setPermissions(array(
    'delete' => false,
    'detach' => function () {
      return Member::currentUser() && Member::currentUser()->inGroup('editors');
    }
  ));

图像上传有一些额外的选项。

FileAttachmentField::create('MyImage','Upload an image')
    ->imagesOnly() // If bound to a record, with a relation to 'Image', this isn't necessary.
    ->setMaxResolution(50000000); // Do not accept images over 5 megapixels

默认设置

大多数设置的默认值可以在模块包含的config.yml文件中找到。

CMS中使用

FileAttachmentField可以用作CMS中UploadField的替代品。

以编程方式与Dropzone界面交互

对于自定义集成,您可能需要访问管理上传UI的UploadInterface对象(见file_attachment_field.js)。您可以通过以下两种方式之一进行操作

  • 如果您已安装jQuery,只需访问.dropzone元素的dropzoneInterface数据属性
$('#MyFileDropzone').data('dropzoneInterface').clear();
  • 如果您没有使用jQuery,则UploadInterface对象注入到浏览器全局window.dropzones中,按.dropzone元素的id索引。
window.dropzones.MyFileDropzone.clear();

注意:默认情况下,实际的.dropzone元素的ID是表单输入的名称,后面加上“Dropzone”,所以FileAttachmentField::create('MyFile')创建了一个ID为'MyFileDropzone'的dropzone

跟踪/移除未使用的文件上传

FileAttachmentField::create('MyImage','Upload an image')
    ->setTrackFiles(true)

FileAttachmentField:
  track_files: true

要阻止用户通过前端上传大量文件并填充服务器的硬盘,您可以在记录中跟踪每个文件上传,然后在表单使用Form::saveInto($record)保存时将其删除。

如果您不使用Form::saveInto,您将需要手动使用以下方式取消跟踪文件ID

FileAttachmentFieldTrack::untrack($data['MyImageID']);

要执行所有跟踪文件的删除操作,您可以运行FileAttachmentFieldCleanTask

故障排除

环形叔叔奶酪。