ego008 avatar

youbbs 从又拍云转到SAE Storage

🕚 by ego008

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

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

PS:刚才试了一下,SAE Storage 接口正常,示例 $s = new SaeStorage(); $img_url = $s->write( 'avatar' , '2.jpg', $out_img);

💘 相关文章

评论

共11条关于"youbbs 从又拍云转到SAE Storage"的评论

沉默小子g avatar
#1 沉默小子g 回复

我都要哭了,使用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 SET avatar='$mid' WHERE id='$mid'")){ $MMC->delete('u_'.$mid); }else{ $tip2 = '数据保存失败,请稍后再试'; } } }else{ $tip2 = '图片保存失败,请稍后再试'; }

沉默小子g avatar
#2 沉默小子g 回复

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

沉默小子g avatar
#3 沉默小子g 回复

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

沉默小子g avatar
#4 沉默小子g 回复

而且无论是使用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的,我没有改动。问题到底出在哪里了?我绝望了

ego008 avatar
#5 ego008 回复

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

沉默小子g avatar
#6 沉默小子g 回复

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

沉默小子g avatar
#8 沉默小子g 回复

我两种方法的代码(修改了从、、上传到又拍云 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)

ego008 avatar
#9 ego008 回复

@沉默小子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

沉默小子g avatar
#10 沉默小子g 回复

@ego008 太坑爹了,我刚发现刚才取消其他参数后上传的图片现在可以直接查看了http://ww1.sinaimg.cn/large/a74eed94jw1e3oee478zqj.jpg 刚才还不可以的,现在我去掉可选参数后上传的图片可以查看了。另外你给的也可以直接看到 有些莫名奇妙了,但不管了,只要好了就好,非常感谢你

ego008 avatar
#11 ego008 回复

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

写一条评论

Based on Golang + fastHTTP + sdb | go1.17.3 Processed in 1ms