雨鱼 发表于 2010-11-10 15:52 
想起来了,问过你头像的事
头像上次请教了孙鸭子关于如何实现复制他人的头像以后顿时觉得自己的代码完全是小儿科了,而且孙鸽子被我弄烦了以后现在已经不理我了{:4_157:}
头像的实现方式就是先建立一个google application engine应用,捕获到指定的URL请求以后在服务器处理以后再跳转或者输出。
我是用java写的,先在servlet里将orz路径下的所有请求都跳转到showPicByStream这个方法,然后读取image目录下某个文件夹(文件夹名就是请求的图片名)内的所有图片以后随机输出。
//随机选取目录下的图片采用流的形式输出
public void showPicByStream(HttpServletRequest request, HttpServletResponse response) throws ServletException ,IOException{
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
// response.setHeader("Cache-Control", "max-age=3600");
String orderOrRandom = "random";
String uri = request.getRequestURI();
String[] uriTemp = uri.split("/");
String dir = uriTemp[uriTemp.length-1].split("\\.")[0];
String img = request.getSession().getServletContext().getRealPath("image")+"/"+dir;
try{
File imgPath = new File(img);
File[] imgList = imgPath.listFiles();//获得图片文件夹下的所有图片File
Integer num;
num = (int)(Math.random()*(imgList.length));
OutputStream out = response.getOutputStream();
//字节流一次输出方式
FileInputStream inputStream = new FileInputStream(imgList[num]);
int i = inputStream.available();
byte data[]=new byte[i];
inputStream.read(data);
inputStream.close();
out.write(data);
} catch (Exception e) {
e.printStackTrace();
PrintWriter toClient = response.getWriter(); // 得到向客户端输出文本的对象
response.setContentType("text/html;charset=UTF-8");
toClient.write("error"+img);
toClient.close();
}
}
这样做的缺点是流量由服务器承担,不过GAE的配额完全用不完,更方便的方法是随机选取一个图片的URL以后用
response.sendRedirect(mappingImgUrl)
跳转,用java写依然步骤有点多。PHP似乎只要3行代码就够了{:4_169:}