You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

125 lines
3.4 KiB

<?php
namespace backend\modules\file\logic\file;
use backend\modules\file\models\ars\File;
use backend\modules\file\models\ars\TemFile;
use yii\web\HttpException;
use yii;
class FileManager
{
//数据表ats_file和ats_tem_file的类型字段type
const TYPE_NONE = 0;//不存在
const TYPE_IMAGE = 1;//图片
const TYPE_VIDEO = 2;//影视
const TYPE_EXCEL = 3;//excel表单
const TYPE_WORD = 4;//word文本
const TYPE_TXT = 5;//txt文本
private $extension = [
self::TYPE_IMAGE => ['jpg', 'png', 'jpeg'],
self::TYPE_VIDEO => ['mp4'],
self::TYPE_EXCEL => [],
self::TYPE_WORD => ['docx'],
self::TYPE_TXT => ['txt'],
];
/**
* @param $keyword
* @return int|string
* 根据文件拓展名在$extension中查找对应的文件类型,若不存在则返回self::TYPE_NONE
*/
public function searchType($keyword)
{
foreach($this->extension as $key => $type){
if (in_array($keyword, $type)) {
return $key;
}
}
return self::TYPE_NONE;
}
/**
* @param $temFileIdArr
* @param $ownId
* @param $ownType
* @return array|bool
* @throws \Exception
* 根据临时文件id将临时文件保存在文件中
*/
public function saveTemFileToFile($temFileIdArr, $ownId, $ownType)
{
if(empty($temFileIdArr) || !$ownId) {
return false;
}
$tra = Yii::$app->db->beginTransaction();
try {
$firstFileId = 0;
foreach ($temFileIdArr as $key => $value) {
$temFile = TemFile::findOne($value);
if ($temFile) {
$res = self::saveNewFile($temFile, $ownId, $ownType);
if ($key == 0) {
$firstFileId = $res['file_id'];
}
}
}
$tra->commit();
return ['status' => true, 'info' => '保存成功', 'first_file_id' => $firstFileId];
} catch (\Exception $e) {
$tra->rollBack();
throw new \Exception($e->getMessage());
}
}
/**
* @param $temFile
* @param $ownId
* @param $ownType
* @return array
* @throws HttpException
* 创建新的文件
*/
private function saveNewFile($temFile, $ownId, $ownType)
{
$newFile = new File();
$newFile->name = $temFile->name;
$newFile->type = $temFile->type;
$newFile->own_id = $ownId;
$newFile->own_type = $ownType;
$newFile->alias = $temFile->alias;
$newFile->path = $temFile->path;
if($newFile->save()) {
return ['status' => true, 'info' => '操作成功', 'file_id' => $newFile->id];
} else {
throw new HttpException('500', 'File保存失败');
}
}
/**
* @param $fileIdArr
* @return bool
* @throws HttpException
* 删除file表中的文件
*/
public function deleteFile($fileIdArr)
{
if($fileIdArr){
foreach ($fileIdArr as $key => $value) {
$fileModel = File::findOne($value);
if($fileModel){
$fileModel->is_delete = File::IS_DELETE_YES;
if(!$fileModel->save()){
throw new HttpException('500', '文件删除失败');
}
}
}
}
return true;
}
}