首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银条图片上传正在更改名称

银条图片上传正在更改名称
EN

Stack Overflow用户
提问于 2015-02-27 16:03:16
回答 1查看 398关注 0票数 2

我正在上传一个图像,在存储图像时,我设置的文件名类似于‘assets/上载/54f092af271b9.png’,但是保存后,Filename字段会丢失一些部分。它变成'assets/54f092af271b9.png‘,完全失去了“上载/”目录。这应该发生吗?

这是密码:

代码语言:javascript
复制
            <?php 
            $img = new Image();
            $baseName = pathinfo($file, PATHINFO_BASENAME);
            $fileName = 'assets/Uploads/' . $baseName;

            var_dump($fileName);

            $img->Name = $baseName;
            $img->Filename = $fileName;
            $img->OwnerID = ($memberID = Member::currentUserID()) ? $memberID : 0;
            $img->write();


            var_dump($img->Filename); exit;

产出如下:

资产/上传/54f092af271b9.png资产/54f092af271b9.png‘

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-28 08:10:17

我能够用您提供的代码复制这个问题。经过一段时间的挖掘,这是我发现的。

所有这些都是在onAfterWrite类中的File函数( Image扩展的)中开始的。调用write (显然)之后,调用updateFilesystem,其中这条线使用getRelativePath函数调用的结果设置Filename属性。

在编写本报告时,getRelativePath如下所示:

代码语言:javascript
复制
public function getRelativePath() {
    if($this->ParentID) {
        // Don't use the cache, the parent has just been changed
        $p = DataObject::get_by_id('Folder', $this->ParentID, false);
        if($p && $p->exists()) return $p->getRelativePath() . $this->getField("Name");
        else return ASSETS_DIR . "/" . $this->getField("Name");
    } else if($this->getField("Name")) {
        return ASSETS_DIR . "/" . $this->getField("Name");
    } else {
        return ASSETS_DIR;
    }
}

看看这段代码,您所遇到的问题是在您将ParentID写到DB时没有在记录上设置它,所以第二个条件是运行,而不是返回ASSETS_DIR . "/" . $this->getField("Name")的结果。

这就是解决的问题,现在需要一个解决方案。Silverstripe想要一个父文件夹,你只需要给它一个。

幸运的是,Folder类上有一个很小的函数,名为find_or_make,它可以按照名称的要求查找文件系统和DB中的文件夹记录,或者它会为您生成文件夹记录。

注意:在我自己的测试中,虽然我有一个“上传”文件夹,但我没有相应的DB记录,因此这个函数为我写了一个返回结果。

然后,我使用这个结果给出了我正在写入DB的图像一个ParentID,它使第二个var_dump返回与第一个相同的值。

在调用write之前,只需在代码中添加以下内容

代码语言:javascript
复制
$parentFolder = Folder::find_or_make('Uploads');
$img->setParentID($parentFolder->ID);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28769308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档