最近我们项目需要一台图片服务器存储用户头像,我们使用 zimg 处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 zimg,并获取相应图片的返回信息
使用 curl 库实现上传
根据 zimg 使用文档,我们想要让 zimg 返回 json 信息,就必须 raw_post 上传图片,下面是演示代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
$upload_url = 'http://192.168.0.99:5000/upload' ; $image_file = './test.jpg' ; // 获取图片后缀 $value = explode ( "." , $image_file ); $extension = strtolower ( array_pop ( $value )); // 生成本地临时存储路径,并生成相应文件夹 $dir = 'aurthur' ; $save_path = 'uploads/' . $dir . '/' . date ( 'Y' ). '/' . date ( 'md' ). '/' ; $save_rule = md5(uniqid(mt_rand(), true)); if (! is_dir ( $save_path )){ if (false === mkdir ( $save_path , 0700, true)){ exit ( '创建文件夹失败' ); } } $save_image_file = $save_path . $save_rule . ".$extension" ; // 把图片存储到临时路径 file_put_contents ( $save_image_file , file_get_contents ( $image_file )); // 获取临时保存的图片的真实地址(绝对路径) $realpath = realpath ( $save_image_file ); // 上传图片到 zimg 图片存储服务 $ch = curl_init(); // 将图片内容读取到变量 $post_data ; $post_data = file_get_contents ( $realpath ); $headers = array (); // 一定要添加此 header $headers [] = 'Content-Type:' . $extension ; curl_setopt( $ch , CURLOPT_URL, $upload_url ); curl_setopt( $ch , CURLOPT_HEADER, false); curl_setopt( $ch , CURLOPT_HTTPHEADER, $headers ); curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt( $ch , CURLOPT_POST, true); curl_setopt( $ch , CURLOPT_BINARYTRANSFER, true); curl_setopt( $ch , CURLOPT_POSTFIELDS, $post_data ); // raw_post方式 $info = curl_exec( $ch ); curl_close( $ch ); $json = json_decode( $info , true); $signature = $json [ 'info' ][ 'md5' ]; echo $signature ; |
如果想测试代码的话,请把上面的uploadurl改成你自己的zimg服务器地址,并把image_file 改成你需要上传的图片的路径。