一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して16日目です。クリックしてイベントの詳細をご覧ください。
まず、記事を追加するページである一般的なシナリオについて説明します。記事の表紙画像をアップロードする必要があります。ファイルのアップロードは別の機能です。ファイルが正常にアップロードされると、URLアドレスが返されます。ページにエコーします。次に、その他の情報を入力し、最後に[データベースの送信]をクリックします。
ただし、ファイルをアップロードする従来の方法では、一部のジャンクファイルが生成されます。たとえば、ページにファイルを複数回アップロードすると、データベースに保存されているリンクは、最後にアップロードした画像へのリンクになります。そうすると、前に投稿した写真は実際には役に立たず、私は写真を集めていないので、それらを求めるのは無意味です。
では、この問題を回避する方法は?
私は前に角に入ったばかりです、それは実際には非常に簡単です:
ファイルをアップロードすると、画像ファイルがキャッシュディレクトリにアップロードされ、リンクが返され、エコーされます。
[送信]をクリックしてデータベースに書き込む場合は、データベースに書き込まれた画像リンクに対応する画像を公式の画像ディレクトリに移動します。
次に、スケジュールされたタスクを記述して、キャッシュディレクトリ内のファイルを定期的にクリアします。
これにより、ジャンクファイルの生成が回避されます〜
以前の別の考えは:
アップロードされたファイルのリンクをデータベーステーブルに保存し、前日にアップロードされたファイルを表示する時間指定タスクメソッドを記述します。これらのファイルはデータベーステーブルに保存されないため、削除します。次に、データテーブルのデータをクリアします
この方法は実際には悪くありませんが、データベースに保存されているファイル情報を一時的に保存するためにデータベーステーブルを追加する必要があります。
最後に、laravelフレームワークにカプセル化したパブリックアップロードファイルメソッドを共有します。
/**
* @name: 公共上传文件方法
* @author: camellia
* @date: 2021-02-18
* @param: $file object 文件流
* @param: $filepath string 文件目录
* @param: $file_type string 文件类型字符串(.png,.bmp,.mp4,.mp3)
* @param: $file_size number 文件大小(字节数)
*/
public function uploadPublic($file, $filepath, $file_type, $file_size)
{
try{
// 文件存放公共目录
$path = "./uploads/";
if (!$file)
{
$result['code'] = -1;
$result['msg'] = '参数错误,缺少文件流信息!';
return $result; //没有图片
}
//获取图片后缀(如abc.png,获取到的为png)
$file_ext = $file->extension();
// 允许上传图片类型数组
$file_type_array = explode(',', $file_type);
// 判断格式
if (!in_array(strtolower('.' . $file_ext), $file_type_array))
{
$result['code'] = -2;
$result['msg'] = '文件格式错误!';
return $result; //格式不符
}
// 文件大小(这里取得的是字节数)
$fileSize = $file->getSize();
if ($fileSize >= $file_size)
{
$result['code'] = -10;
$result['msg'] = '文件大小超出限制!';
return $result;
}
//文件重命名
$new_name = date('Y-m-d-H-i-s', time()) . '_' . rand(1000000, 9999999) . '.' . $file->getClientOriginalExtension();
// 文件保存目录
$savepath = $path . $filepath;
// 如果目录不存在,创建目录
if (!is_dir($savepath))
{
$mkdir = "mkdir -p " . $savepath;
exec($mkdir, $output, $status);
}
// 移动文件
if ($file->move($savepath, $new_name))
{
$result['code'] = 1;
$result['name'] = $new_name;
$result['url'] = DOMAIN.$filepath . $new_name;
$result['path'] = $path . $filepath . $new_name;
$result['type'] = $file->getClientOriginalExtension();
$result['msg'] = '文件上传成功!';
return $result;
}
else
{
$result['code'] = -3;
$result['msg'] = '文件上传失败!';
return $result; //移动失败
}
}
catch(Exception $e)
{
$result['code'] = -10;
$result['msg'] = '上传文件发生错误!';
return $result;
}
}
复制代码
私が考えるこれらの2つの方法が実際にあります。良い提案があれば、以下にコメントを入力してください。
個人ブログguanchao.siteへようこそ