上传头像的入口方法

在UserProfileModule中新增一个方法,带适配器的哦

  1. @AdaptBy(type=UploadAdaptor.class, args={"${app.root}/WEB-INF/tmp/user_avatar", "8192", "utf-8", "20000", "102400"})
  2. @POST
  3. @Ok(">>:/user/profile")
  4. @At("/avatar")
  5. public void uploadAvatar(@Param("file")TempFile tf,
  6. @Attr(scope=Scope.SESSION, value="me")int userId,
  7. AdaptorErrorContext err) {
  8. String msg = null;
  9. if (err != null && err.getAdaptorErr() != null) {
  10. msg = "文件大小不符合规定";
  11. } else if (tf == null) {
  12. msg = "空文件";
  13. } else {
  14. UserProfile profile = get(userId);
  15. try {
  16. BufferedImage image = Images.read(tf.getFile());
  17. image = Images.zoomScale(image, 128, 128, Color.WHITE);
  18. ByteArrayOutputStream out = new ByteArrayOutputStream();
  19. Images.writeJpeg(image, out, 0.8f);
  20. profile.setAvatar(out.toByteArray());
  21. dao.update(profile, "^avatar$");
  22. } catch(DaoException e) {
  23. log.info("System Error", e);
  24. msg = "系统错误";
  25. } catch (Throwable e) {
  26. msg = "图片格式错误";
  27. }
  28. }
  29. if (msg != null)
  30. Mvcs.getHttpSession().setAttribute("upload-error-msg", msg);
  31. }

基本步骤是: 先判断是否有上传异常,然后解析图片,缩放,保存到数据库.

在编写的过程中,发现SimpleBlob不兼容最新驱动的样子,所以就继承一下,覆盖原本的错误实现.

Upload适配器的几个参数: 临时文件夹路径,缓存环的大小,编码,临时文件夹的文件数,上传文件的最大大小