youbbs 从又拍云转到SAE Storage

By ego008 at 2013-04-13 18:16:41 • 1968次点击 • 1收藏

这里不提哪个好哪个不好。

需要修改的地方:
后台的图片上传接口,需要生成三种大小的图片,若为了省事也可只保留最大的图片,只是在css 里将图片缩小显示不怎么好看;
前台使用图片的地方,较麻烦的是头像。

PS:刚才试了一下,SAE Storage

接口正常,示例
$s = new SaeStorage();
$img_url = $s->write( 'avatar' , '2.jpg', $out_img);

youbbs, sae, storage


我都要哭了,使用ob_start方法然后再把图像写入到Storage虽然一直可以写入,但是文件总是有问题。
然后我实在找不到原因,就改成用imagejpeg函数把图像存入SAE_TMP_PATH这个目录(http://sae.sina.com.cn/?m=devcenter&catId=206 2 有关于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` SET `avatar`='$mid' WHERE `id`='$mid'")){

$MMC->delete('u_'.$mid);

}else{

$tip2 = '数据保存失败,请稍后再试';

}

}

}else{

$tip2 = '图片保存失败,请稍后再试';

}

沉默小子g at 2013-04-13 21:52:27
1

使用ob_start这种方式上传同一张图片后大小也为2.76kb,也就是说我使用的两种方法得到的图片文件比正常方法得到的小了1.5kb,而这1.5kb应该就是关键所在了

沉默小子g at 2013-04-13 22:05:08
2

我对比了一下两个照片(youbbs生成的和我修改后的代码生成的)的二进制文件,没有发现任何相同的地方(应该是开头处有偏移)。但是在youbbs生成的图片前面有“CREATOR:gd-jpeg v1.0 (using IJG JPEG v62), quality = 95”这串字符,这应该是JPEG格式的头编码,但是我的方法生成的图片却没有这些信息
见下图(上面的正确的图片,下面是错误的图片)

沉默小子g at 2013-04-13 22:15:01
3

而且无论是使用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 at 2013-04-13 22:30:11
4

@沉默小子g 使用最简单的方式,不要其它参数试试
$s->write( 'avatar' , '2.jpg', $out_img);

ego008 at 2013-04-13 22:35:09
5

突然发现我上传到Storage中的文件开启了gzip,关闭后重新上传文件大小为2.91kb,和youbbs相同,但仍然无法打开,二进制比较结果是和开启gzip时的内容完全相同,和youbbs的文件完全不同。
依旧毫无进展, @ego008 我的QQ号码493140692 ,你加我吧,我今晚如果找不到出问题的原因估计就睡不着了,QQ交流快一点儿,在论坛我得等好长时间你才能回复

沉默小子g at 2013-04-13 22:41:24
6

@ego008 我6楼回复的就是没有其他参数的结果

沉默小子g at 2013-04-13 22:43:02
7

我两种方法的代码(修改了从、、上传到又拍云

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 at 2013-04-13 22:45:01
8

@沉默小子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 1
显示正常

在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 1

ego008 at 2013-04-13 22:56:15
9

@ego008 太坑爹了,我刚发现刚才取消其他参数后上传的图片现在可以直接查看了

刚才还不可以的,现在我去掉可选参数后上传的图片可以查看了。另外你给的也可以直接看到
有些莫名奇妙了,但不管了,只要好了就好,非常感谢你

沉默小子g at 2013-04-13 23:23:03
10

@沉默小子g 应该是SAE 上开启压缩的问题,以前尝试把数据保存在kvdb,开启压缩,同样有问题,可能读取时还需解压吧,不深入了解。

ego008 at 2013-04-14 00:03:37
11
登录 后发表评论