Silverstripe:带文件上传的前端表单可能会覆盖现有文件

时间:2015-01-15 22:46:22

标签: silverstripe

我遇到了一个我的项目的小问题。我有一个工作前端表单,可用于将图像放入数据对象并保存。到目前为止没问题,但它是一个头像,所以当我的一个用户上传avatar.png时,它可能会被另一个使用相同文件名的用户覆盖。这是预期的Silverstripe行为,但在我的情况下是不受欢迎的。

是否可以在图像名称前加一个字符串,例如用户名(这是唯一的)?在一个完美的世界中,只会发生在前端,但我会满足于: - )

此致 Joost的。

1 个答案:

答案 0 :(得分:0)

好吧,最后我找到了以下解决方案。上传类有一个设置,可让您指定是替换图像还是更改图像文件名,然后上传。有趣的是,默认设置为不替换。

我使用的formfield类是UploadField,它扩展了使用上传类的FileField。默认情况下,UploadField类使用Upload-> setReplaceFile(true)设置上传以替换旧文件。

因此,我决定创建一个新的上传类,并用以下内容替换旧的上传类:

class VBUpload extends Upload {
    public function setReplaceFile($bool) {
        if(strpos($_SERVER["REQUEST_URI"],'admin/')===false) {
            $this->replaceFile = false;
        } else {
            $this->replaceFile = $bool;
        }
    }
}

我只希望从前端调用默认工作更改,也许有更简洁的方法来实现这一点。但是这个对我有用。

下一步要做的就是强制系统实际使用该类,所以我将其添加到/mysite/_config/config.yml:

Injector:
  Upload:
    class: VBUpload

这可能也可以通过正常扩展来完成,但是当需要时我会改变它: - )