youbbs 从又拍云转到SAE Storage
这里不提哪个好哪个不好。
需要修改的地方:
后台的图片上传接口,需要生成三种大小的图片,若为了省事也可只保留最大的图片,只是在css 里将图片缩小显示不怎么好看;
前台使用图片的地方,较麻烦的是头像。
PS:刚才试了一下,SAE Storage 接口正常,示例
$s = new SaeStorage();
$img_url = $s->write( 'avatar' , '2.jpg', $out_img);
0
See Also
- 从又拍云改为Storage
- sae版本的能不用又拍云吗
- 使用YouBBS迅速在SAE搭建了一个小站点:gxgames.net
- 求教sae的youbbs上传不了头像
- SAE微博登录不了,还显示空白的错误信息
Nearby
- 上一篇 › BAE: Call to undefined function mc_pack_array2pack
- 下一篇 › 为什么帖子的链接和右边回复数的链接不统一,我看 v2ex 的都是一样的,有什么特殊原因吗?
我都要哭了,使用ob_start方法然后再把图像写入到Storage虽然一直可以写入,但是文件总是有问题。
然后我实在找不到原因,就改成用imagejpeg函数把图像存入SAE_TMP_PATH这个目录(http://sae.sina.com.cn/?m=devcenter&catId=206 有关于SAE_TMP_PATH的介绍),依然是可以写入,但是文件还有问题。而且我用同一张头像在youbbs上传后得到的大小是2.91kb,然后使用SAE_TMP_PATH目录再上传到SAE Storage中显示大小为2.76kb,我现在已经处于崩溃的边缘了,我知道绝对是我那句写错了,但是我怎么也找不到T_T
我的代码:
imagejpeg($new_image, SAE_TMP_PATH."/ava.jpg", 95);
$s = new SaeStorage();
$attr = array('expires' => 'access plus 2 hour');
if($s->upload('avatar',''.$mid.'.jpg',SAE_TMP_PATH."/ava.jpg",-1,$attr,true) !=false)
{
if($cur_user['avatar']!=$mid){
if($DBM->unbuffered_query("UPDATE
yunbbs_users
SETavatar
='$mid' WHEREid
='$mid'")){$MMC->delete('u_'.$mid);
}else{
$tip2 = '数据保存失败,请稍后再试';
}
}
}else{
$tip2 = '图片保存失败,请稍后再试';
}
使用ob_start这种方式上传同一张图片后大小也为2.76kb,也就是说我使用的两种方法得到的图片文件比正常方法得到的小了1.5kb,而这1.5kb应该就是关键所在了
我对比了一下两个照片(youbbs生成的和我修改后的代码生成的)的二进制文件,没有发现任何相同的地方(应该是开头处有偏移)。但是在youbbs生成的图片前面有“CREATOR:gd-jpeg v1.0 (using IJG JPEG v62), quality = 95”这串字符,这应该是JPEG格式的头编码,但是我的方法生成的图片却没有这些信息
见下图(上面的正确的图片,下面是错误的图片)
而且无论是使用ob_start还是SAE_TMP_PATH,所生成的文件二进制完全一样。也就是说
“ob_start();
imagejpeg($new_image, NULL, 95);
$out_img = ob_get_contents();
”
这个里面的$out_img和
“
imagejpeg($new_image, SAE_TMP_PATH."/ava.jpg", 95);
"这个里面的ava.jpg文件都是有问题的,也就是说imagejpeg函数有问题,可是这个函数及它之前的代码都是youbbs的,我没有改动。问题到底出在哪里了?我绝望了
@沉默小子g 使用最简单的方式,不要其它参数试试
$s->write( 'avatar' , '2.jpg', $out_img);
突然发现我上传到Storage中的文件开启了gzip,关闭后重新上传文件大小为2.91kb,和youbbs相同,但仍然无法打开,二进制比较结果是和开启gzip时的内容完全相同,和youbbs的文件完全不同。
依旧毫无进展,@ego008 我的QQ号码493140692 ,你加我吧,我今晚如果找不到出问题的原因估计就睡不着了,QQ交流快一点儿,在论坛我得等好长时间你才能回复
@ego008 我6楼回复的就是没有其他参数的结果
我两种方法的代码(修改了从、、上传到又拍云
include(ROOT.'/upyun.class.php');这句开始的地方)
1.
imagejpeg($new_image, SAE_TMP_PATH."/ava.jpg", 95);
$s = new SaeStorage();
//$attr = array('expires' => 'access plus 2 hour');
if($s->upload('avatar',''.$mid.'.jpg',SAE_TMP_PATH."/ava.jpg") !=false)
2.
ob_start();
imagejpeg($new_image, NULL, 95);
$out_img = ob_get_contents();
$s = new SaeStorage();
$attr = array('expires' => 'access plus 2 hour');
if($s->write('avatar',''.$mid.'.jpg',$out_img,-1,$attr,true) !=false)
@沉默小子g 刚才又测试,
上传方式
$attr = array('expires' => 'access plus 2 hour');
$img_url = $s->write( 'avatar' , '2.jpg', $out_img,-1,$attr,true);
http://youbbs-avatar.stor.sinaapp.com/2.jpg
显示不正常
$img_url = $s->write( 'avatar' , '3.jpg', $out_img);
http://youbbs-avatar.stor.sinaapp.com/3.jpg
显示正常
在setting.php 修改头像的地方添加下面测试代码,注意上下文
// 上传到又拍云
include(ROOT.'/upyun.class.php');
ob_start();
imagejpeg($new_image, NULL, 95);
$out_img = ob_get_contents();
if($cur_user['flag']==99){
$s = new SaeStorage();
$attr = array('expires' => 'access plus 2 hour');
//$img_url = $s->write( 'avatar' , '2.jpg', $out_img,-1,$attr,true);
$img_url = $s->write( 'avatar' , '3.jpg', $out_img);
header('Content-Type: text/html');
echo $img_url.'<img src="'.$img_url.'"/>';
exit;
}
PS:关于头像问题,最好不要再压缩了,jpg已经是压缩了,参见以前的一篇测试 http://saepy.sinaapp.com/t/66
@ego008 太坑爹了,我刚发现刚才取消其他参数后上传的图片现在可以直接查看了http://ww1.sinaimg.cn/large/a74eed94jw1e3oee478zqj.jpg
刚才还不可以的,现在我去掉可选参数后上传的图片可以查看了。另外你给的也可以直接看到
有些莫名奇妙了,但不管了,只要好了就好,非常感谢你
@沉默小子g 应该是SAE 上开启压缩的问题,以前尝试把数据保存在kvdb,开启压缩,同样有问题,可能读取时还需解压吧,不深入了解。