Пример #1
0
 public function uploadFile($fileName, $fileType, $fileSize, $file, $userId, $currentId)
 {
     $userFile = UserFile::findOne(['md5' => md5_file($file)]);
     if ($userFile == null) {
         $userFile = new UserFile();
         $userFile->filename = $fileName;
         $userFile->filetype = $fileType;
         $userFile->filesize = $fileSize;
         $userFile->file = $file;
         if (!$userFile->save()) {
             return '2';
         }
     }
     $fm_log = FileManageLog::findAll(['file_id' => $userFile->_id]);
     if ($fm_log != null) {
         return '3';
         //违规文件
     }
     $disk = Disk::findOne(['user_id' => $userId]);
     try {
         $tran = \Yii::$app->db->beginTransaction();
         $created_date = date('Y-m-d H:i:s');
         $user_id = $userId;
         $record_id = md5($user_id . $fileName . $created_date);
         $fileRecord = new FileRecord();
         $fileRecord->f_record_id = $record_id;
         $fileRecord->f_record_type = "1";
         $fileRecord->file_id = $userFile->_id;
         $fileRecord->user_id = $user_id;
         $fileRecord->file_name = $fileName;
         $tmps = explode('.', $fileName);
         if (count($tmps) == 1) {
             $fileRecord->extension = '';
         } else {
             $fileRecord->extension = end($tmps);
         }
         $fileRecord->file_type = $fileType;
         $fileRecord->file_size = $fileSize;
         $fileRecord->parent_id = $currentId;
         $fileRecord->upload_date = $created_date;
         $fileRecord->state = "0";
         if ($fileRecord->save()) {
             $disk->available_size = $disk->available_size - $fileSize;
             if ($disk->available_size < 0) {
                 return '1';
                 //空间不足
                 $tran->rollBack();
             }
             if ($disk->save()) {
                 $parent_folder = FileRecord::findOne(['f_record_id' => $currentId]);
                 while ($parent_folder->parent_id != '0') {
                     $parent_folder->file_size = $parent_folder->file_size + $fileSize;
                     if ($parent_folder->save()) {
                         $parent_folder = FileRecord::findOne(['f_record_id' => $parent_folder->parent_id]);
                     } else {
                         $tran->rollBack();
                         return 'error';
                     }
                 }
                 $tran->commit();
                 return FileRecord::find()->where(['f_record_id' => $record_id])->asArray()->one();
             }
         } else {
             return '2';
             //数据库错误
         }
     } catch (Exception $e) {
         return '2';
     }
 }