随着工作环境的变化,自己的编程语言也发生了相应的变化,之前一直从事java的开发,但现在迫不得已的转为php(php是世界上最好的语言),原先接手的文件上传,一直是通过FastDFS上传至服务器,方便快捷,现在接手的上传有点苦逼,或许是自己对php还不够熟练,应用起来比较费劲,现将详细的laravel中的文件上传记录下来,以便后续使用!!!(转载请标明出处!)
public static function uploadFile(Request $request){
if ($request->isMethod('post')) {//为了安全,还是需要增加一些判断
$pic = $request->file('file');
if($pic){
$file_name = strval(date('Ymd')) . strval(time()) . '.' . substr(strrchr($pic->getClientOriginalName(), '.'), 1);//获取fileName
$file_path = $pic->getRealPath();//获取真实的上传地址
$file_folder = '/image/testAddr/' . strval(date('Ymd'));//服务器文件夹
$type = $_FILES['file']['type'];//获取文件的类型(此处有坑,待会提到)
$post_data = array(
"file_name" => $file_name,
"file" => new \CURLFile($file_path),
"folder" => $file_folder,
);
$url = config('upload.imgUrl') . 'upload/testUpload';//服务器上传的地址
$res = self::makeRequest_img($url, $post_data);
if($res){
return config('upload.image_url').'uploads'.$file_folder.'/'.$file_name;
}else{
return '上传失败,请重试!';
}
}
}
}
public static function makeRequest_img($url, $param)
{
try{
$ch = curl_init();
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
if (stripos($url, "https://") !== FALSE) {
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $param);
$res = curl_exec($ch);
$status = curl_getinfo($ch);
//dd($status) 非常建议在这打印这个$status
}catch (\Exception $e){
}
curl_close($ch);
if (intval($status["http_code"]) == 200) {
return $res;
} else {
return FALSE;
}
注:1.现在讲刚才提到的那个“坑”,我本地使用的是lamp环境,在上传的时候应该出于效率考虑,php里面自带的上传文件大小限制为2M,现在我们需要将php.ini中的upload_max_filesize 修改为适当的大小,本人限制20M,之后重启,让文件上传飞起来!
2.暂不支持分片上传和断点续传功能
写自己的代码,送给那些曾经瞧不起你的人!
----------------------lonelykeyboard
2019.01.18