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

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

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

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
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年前 评论

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