因为项目需要,后台部署了好几个服务器,所以每次都会需要手动同步文件,很麻烦,所以本人想通过上传的时候自动同步来实现文件上传,废话不多说上代码
$filePath = C('fileUrl').C('FILE_PATH').'你的路径'.$_FILES["file"]["name"];
$url = C('fileUrl');
$data=array(
'fileName'=> new CURLFile($file['file']['tmp_name'],$_FILES["file"]['type'],C('FILE_PATH').'你的路径'.$_FILES["file"]["name"]),
'name'=>$_FILES["file"]["name"]
);
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL, $url); //需要获取的 URL 地址,也可以在curl_init() 初始化会话的时候。
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); //设为 TRUE ,将在启用 CURLOPT_RETURNTRANSFER 时,返回原生的(Raw)输出。
curl_setopt($ch,CURLOPT_POST,true); //发送 POST 请求
curl_setopt($ch,CURLOPT_POSTFIELDS,$data); //发送的数据
curl_setopt($ch, CURLOPT_TIMEOUT, 0); // 允许 cURL 函数执行的最长秒数。 0为无限制
$result = curl_exec($ch);
//判断返回是否异常
if(curl_errno($ch)){
$result = curl_error($ch);
curl_close($ch);
echo(json_encode(array('code' => 1, "msg"=>"同步文件失败,请稍后再试")));
exit();
}
curl_close($ch);
如上图所示:
$_FILES 这个是文件上传获取到的信息,本人用的layui上传来获取的,直接
$file = $_FILES;就能获取文件信息,可以打印出来看看,具体的layui上传方法,可以查看layui文档这是地址:
https://www.layui.com/doc/modules/upload.html
先得到文件路径,这个自己配置,
$filePath = C('fileUrl').C('FILE_PATH').'你的路径'.$_FILES["file"]["name"];这个是我的文件所在路径,
$url 接收文件发的地址方法,
$data需要传输的文件信息(CURLFile(文件临时路径,文件类型,文件存放路径)用于传输文件的方法,详细介绍自行百度),
$ch = curl_init(); 初始化对话
剩下的设置都有
上面是发送方的
下面的是接收方的
//接收文件
public function getFileAction(){
if(!$_FILES){
echo json_encode(array('code'=>1,"msg"=>"接收失败"));
exit();
}
$fileName =$_FILES['fileName']["name"] ;
$filePath = iconv("UTF-8","GBK//IGNORE","文件路径");
if($_FILES){
if(!file_exists($filePath)){
mkdir($filePath);
}
$dest ="文件路径". iconv("UTF-8","GBK//IGNORE",$fileName);
$info = copy($_FILES['fileName']['tmp_name'], $dest);
if(!$info){
echo json_encode(array('code'=>1,"msg"=>"接收失败"));
exit();
}
echo json_encode(array('code'=>0,"msg"=>"接收成功"));
}else{
echo json_encode(array('code'=>1,"msg"=>"接收失败"));
}
}
$filePath = iconv("UTF-8","GBK//IGNORE","文件路径"); 注意这里的文件路径只是一个目录,不带文件名称
$dest ="文件路径". iconv("UTF-8","GBK//IGNORE",$fileName); 这个是存放文件的目标地址用iconv转换一下是为了用file_exists()方法,如果用转化的话会报错找不到文件
以上就是文件传输和接收的方法,如有问题欢迎留言