tp5.1上传

<?php

namespace appapicontroller;

use apputilReturnCode;
use thinkController;
use Request,Log,Config;

class Upload extends Base
{
protected $size;
protected $savePath;
protected $i;

//带文件类型验证的上传
public function upload()
{

$tooken = $this->request->header('Authorization');
$jwtn = new Jwtn();
$res = $jwtn->checkToken($tooken);
if (!$res) {
return $this->buildFailed(ReturnCode::OTHER_LOGIN, '登陆超时');
}
// 大小
$size=30*1024*1024;
//获得文件的对象信息
$file = request()->file();
// 移动到框架应用根目录/public/upload/ 目录下
$ifsuccess=true;$i=0;$num=0;$data=array();
foreach ($file as $k=>$v) {
$i++;
$info = $v->validate(['size' => $size, 'ext' => 'jpg,png,pdf,zip'])->move('../public/upload');
if ($info) {
$data[$k][]=[
'fileName' => $info->getFilename(),
'fileUrl' => $this->request->domain().'/public/upload'.$info->getSaveName(),
'time' =>time()
];
} else {
$num++;
$ifsuccess=false;
$num++;
$data[$k][]=[
'error_code' => ReturnCode::FILE_SAVE_ERROR,
'msg' => '文件上传失败'
];
}
}
if($ifsuccess){
return $this->buildSuccess($data, '所有文件上传成功',ReturnCode::SUCCESS);
}else{
if($i == $num){
return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, '所有文件上传失败',$data);
}else{
return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, '部分文件上传失败',$data);
}
}
}
//未验证文件格式
public function upload_() {
$path = '/upload/' . date('Ymd', time()) . '/';
$tooken = $this->request->header('Authorization');
$jwtn=new Jwtn();
$res =$jwtn->checkToken($tooken);
if(!$res){
return $this->buildFailed(ReturnCode::OTHER_LOGIN, '登陆超时');
}
$ifsuccess=true;$i=0;$num=0;$data=array();
foreach ($_FILES as $k=>$v){
$i++;
$name = $v['name'];
$tmp_name = $v['tmp_name'];
$error = $v['error'];
//过滤错误
if ($error) {
switch ($error) {
case 1:
$error_message = '您上传的文件超过了PHP.INI配置文件中UPLOAD_MAX-FILESIZE的大小';
break;
case 2:
$error_message = '您上传的文件超过了PHP.INI配置文件中的post_max_size的大小';
break;
case 3:
$error_message = '文件只被部分上传';
break;
case 4:
$error_message = '文件不能为空';
break;
default:
$error_message = '未知错误';
}
die($error_message);
}
$arr_name = explode('.', $name);
$hz = array_pop($arr_name);
$new_name = md5(time() . uniqid()) . '.' . $hz;
if (!file_exists($_SERVER['DOCUMENT_ROOT'] . $path)) {
mkdir($_SERVER['DOCUMENT_ROOT'] . $path, 0755, true);
}
if (move_uploaded_file($tmp_name, $_SERVER['DOCUMENT_ROOT'] . $path . $new_name)) {
$data[$k][]=[
'fileName' => $new_name,
'fileUrl' => $this->request->domain() . $path . $new_name,
'time' =>time()
];
} else {
$ifsuccess=false;
$num++;
$data[$k][]=[
'error_code' => ReturnCode::FILE_SAVE_ERROR,
'msg' => '文件上传失败'
];
}
}
if($ifsuccess){
return $this->buildSuccess($data, '所有文件上传成功',ReturnCode::SUCCESS);
}else{
if($i == $num){
return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, '所有文件上传失败',$data);
}else{
return $this->buildFailed(ReturnCode::FILE_SAVE_ERROR, '部分文件上传失败',$data);
}
}
}


/**
* 文件上传处理
* @return hink esponseJson
*/
public function upload1($file, $num=1){
//获取upload配置信息
$path = config('common.app_path');
$config = config('upload.');
$this->size = $config['img_size'];
$this->savePath = $config['save_path'] . DIRECTORY_SEPARATOR . 'images';
$this->i = $config['compression_size'];
if(1 == $num){
$info = $file->validate(['size'=>$this->size])
->move($this->savePath);
if($info){
$url1 = dirname($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $info->getSaveName();
//生成缩略图
$image = Image::open($url1);

$width = $image->width() * $this->i;
$height = $image->height() * $this->i;
$image->thumb($width, $height, Image::THUMB_CENTER)->save($url1,'jpg',30,true);
$path = $path. DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $info->getSaveName();
$path = str_replace('\', '/', $path);
return $path;
}else{
return $file->getError();
}
}else{
return $this->manyUpload($file);
}
}
//多图
public function manyUpload($files){
$url = config('common.app_path');
$path = null;
foreach($files as $file) { //多图上传关键在这
//验证规则等,在配置文件中读取
$info = $file->validate(['size'=>$this->size])
->move($this->savePath);
if ($info) {
$url1 = dirname($_SERVER['SCRIPT_FILENAME']) . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $info->getSaveName();
//生成缩略图
$image = Image::open($url1);
$width = $image->width() * $this->i;
$height = $image->height() * $this->i;
$image->thumb($width, $height, Image::THUMB_SCALING)->save($url1,'jpg',30,true);

$path .= $url . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . $info->getSaveName() . "|";
} else {
// 上传失败获取错误信息
return $file->getError();
}
}
$path = str_replace('\', '/', $path);
return rtrim($path, '|');

}
/*base64图片*/
function Base64Upload($base64) {
$url = config('common.app_path');
$path = null;
$result = array();
foreach ($base64 as $k => $v) {
$path = dirname(dirname(dirname(__FILE__))) . DIRECTORY_SEPARATOR . 'public' . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR;


//保存base64字符串为图片
//匹配出图片的格式
if (preg_match('/^(data:s*image/(w+);base64,)/', $v, $re)){
$type = $re[2];

$new_file = $path . date('Ymd',time())."/";

if(!file_exists($new_file))
{
//检查是否有该文件夹,如果没有就创建,并给予最高权限
mkdir(iconv("UTF-8", "GBK", $new_file),0777,true);
@chmod($new_file, 0777);
}
//文件名
$file_name = date("YmdHis") . '_' . rand(10000, 99999) . '.' . $type;
//文件存放路径
$new_file = $new_file . $file_name;

if (file_put_contents($new_file, base64_decode(str_replace($re[1], '', $v)))){
$result[$k] = $url . DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . date('Ymd',time()) . DIRECTORY_SEPARATOR . $file_name;
$result[$k] = str_replace('\', '/', $result[$k]);
// echo '新文件保存成功:', $new_file;
}

}
}
return $result;
}
/**
* 上传文件
*/
public function uploadFile($file)
{
//获取upload配置信息
$path = config('common.app_path');
$config = config('upload.');
$size = $config['file_size'];
$savePath = $config['save_path'] . DIRECTORY_SEPARATOR . 'files';
$info = $file->validate(['size'=>$size])
->move($savePath);


if($info){
$path = $path. DIRECTORY_SEPARATOR . 'uploads' . DIRECTORY_SEPARATOR . 'files' . DIRECTORY_SEPARATOR . $info->getSaveName();
$path = str_replace('\', '/', $path);
return $path;
}else{
return $file->getError();
}
}


}

原文地址:https://www.cnblogs.com/cainiaoaixuexi/p/13468816.html