是否应删除被替换掉的头像文件?

对于被替换掉的文件,是不是应该做删除文件处理?

否则用户替换10次头像,前9次的头像文件还存储在服务端,有没有必要?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
leo
最佳答案

没有必要

  1. 磁盘存储是服务器最便宜的支出
  2. 一般人不会频繁换头像
  3. 一个线上的项目通常会把头像存储在 cdn 上,删除要调用 api,性能可能比较差
6年前 评论
讨论数量: 5
leo

没有必要

  1. 磁盘存储是服务器最便宜的支出
  2. 一般人不会频繁换头像
  3. 一个线上的项目通常会把头像存储在 cdn 上,删除要调用 api,性能可能比较差
6年前 评论

有没有这个必要那要看实际的需求了,如果项目中需要用到历史头像那自然就是有必要了。
不过这毕竟是一个教学项目,重点在于教大家使用这个框架,实际项目文件资源往往会做更具体的管理,比如文件信息要存入数据库,方便对资源进行移植。

6年前 评论

public function save($file,$folder,$file_prefix,$max_width=false){

return [
    'path' => config('app.url') . "/$folder_name/$filename",
    'upload_path'=>$upload_path,
];

}

ImageUploadHandler方法返回一个upload_path做为旧图片的绝对路径

public function update(UserRequest $request, User $user,ImageUploadHandler $uploader)
{

    //切割旧图地址获取到图片需要的信息
    $oldImg = explode('/',$user->avatar);

    //旧图片名称
    $oldImgData =$oldImg[8];

    //获取旧图片的绝对路径
    $oldImgPath = $oldImgPath.'/'.$oldImgData;

    $user->update($data);

    if($user->update($data)&&$oldImgPath!=null){
        unlink($oldImgPath);
    }

    return redirect()->route('users.show', $user->id)->with('success', '个人资料更新成功!');

    /*$user->update($request->all());*/
}

Usercontorller中从数据库获取旧图片的地址进行切割,再拼接传回来的地址,加上unlink就OK了

6年前 评论
leo

没有必要

  1. 磁盘存储是服务器最便宜的支出
  2. 一般人不会频繁换头像
  3. 一个线上的项目通常会把头像存储在 cdn 上,删除要调用 api,性能可能比较差
6年前 评论

不建议,除了上面提到的这几点之外,还有安全性隐患的问题在,暴露了删除文件的接口出来比较危险

5年前 评论

@Bruce1111 不太OK 偶!

file 这里的$oldImgPath 没看到; 但是 如果 用户 头像第一次没有,explode 是分割不到的,直接报错了

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!