package com.bestlinkstudio.gamef.controller;
import java.awt.Image;
import java.io.File;
import com.bestlinkstudio.bsp.user.service.UserManageService;
import com.bestlinkstudio.bsp.user.service.UserQueryService;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Controller
public class UserAvatarsController extends BaseController{
private static final Log log = LogFactory.getLog("avatars");
public static final int PICTURE_HEIGHT=188;//
public static final int PICTURE_WIDTH=188;//
public static final int PICTURE_SIZE=10000000;
/**
* 注入系统图片数量
*/
private int systemAvatarsSize=0;
/**
* 注入系统头像文件夹名称
*/
private String systemFolderPath=null;
/**
* 用户上传头像文件夹名称
*
*/
private String customerFolderPath=null;
/**
* 环境变量名称
* @param systemFolderPath
*/
private String systemPath=null;
@Autowired
private UserManageService userManageService;
@Autowired
private UserQueryService userQueryService;
/*
public void setUserManageService(UserManageService userManageService) {
this.userManageService = userManageService;
}*/
public void setSystemPath(String systemPath) {
this.systemPath = systemPath;
}
public void setSystemFolderPath(String systemFolderPath) {
this.systemFolderPath = systemFolderPath;
}
public void setSystemAvatarsSize(int systemAvatarsSize) {
this.systemAvatarsSize = systemAvatarsSize;
}
@RequestMapping("/myavatars")
public String getMyAvatars() {
return "avatars";
}
/**
* 此AJAX控制器,返回所有系统图片的路径
* @param response
* @return
*/
@ResponseBody
@RequestMapping("/avatars")
public ResponseEntity<String[]> getAvatarsAddress(HttpServletRequest request ,HttpServletResponse response) {
//String realPath = request.getSession().getServletContext().getRealPath("/");
//D:\Tomcat 6.0\webapps\ROOT\
String path = null;
String[] message = new String[systemAvatarsSize];
for(int i=0;i<systemAvatarsSize;i++){
int k = i+1;
path = "avatarsread.do?pic="+systemFolderPath+"/"+k+".gif";
message[i] = path;
}
HttpHeaders hd = new HttpHeaders();
hd.setContentType(MediaType.parseMediaType("text/plain;charset=utf-8"));
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
return new ResponseEntity<String[]>(message, hd, HttpStatus.OK);
}
/**
* 通过路径得到系统图片,返回
* @param pic
* @param response
*/
@RequestMapping("/avatarsread")
public void getAvatarsContent(String pic,HttpServletResponse response){
//String p = System.getenv(systemPath);
String p = systemPath;
String folder = pic.substring(0,pic.indexOf("/"));
//如果是pic的文件夹是系统文件夹
if(systemFolderPath.equals(folder)){
response.setContentType("image/gif");
try {
OutputStream os = response.getOutputStream();
File f = new File(p+"/"+pic);
InputStream is = new FileInputStream(f);
byte[] bs = new byte[1024];
int len;
while((len=is.read(bs))!=-1){
os.write(bs,0,len);
}
is.close();
os.close();
} catch (Exception e) {
log.error("系统错误:读取系统图片失败");
}
}
}
/**
*
* @param userId 用户ID
* @param systemPath 系统头像路径
* @param files 上传的头像
* @return
*/
@RequestMapping("/saveavatars")
public String saveAvatars(String avsystemPath , HttpServletRequest request,ModelMap mm,HttpServletResponse response){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
//String p = System.getenv(systemPath);
String p = systemPath;
String userId = this.getLoginUser().getId();
MultipartFile file = multipartRequest.getFile("files");
//上传的文件名字
String fileName = file.getOriginalFilename();
//系统的文件名字
String systemName = getFileName(avsystemPath);
String regex = ".*\\.(jpg|jpeg|gif|bmp)$";
InputStream in=null;
if("".equals(fileName)&&"".equals(avsystemPath)){
userManageService.setUserProperty(userId, "avatar", "");
return forwardMapping("/home");
}
if("".equals(fileName)&&!"".equals(avsystemPath)){
//表明用户选择了系统头像
userManageService.setUserProperty(userId, "avatar", avsystemPath);
}else if("".equals(avsystemPath)&&!"".equals(fileName)){
//表明用户自己上传头像
if(!fileName.matches(regex)){
this.addMessage(mm, "avatar_mistake", "上传失败:文件类型错误");
return forwardMapping("/myavatars");
}else if(file.getSize()>PICTURE_SIZE || file.getSize()==0){
this.addMessage(mm, "avatar_mistake", "上传失败:上传文件尺寸错误");
return forwardMapping("/myavatars");
}else{
return saveImgAndShow(in,file,mm,p,userId,fileName);
}
}else{
//这里2个地方都有值,还是上传
return saveImgAndShow(in,file,mm,p,userId,fileName);
}
return forwardMapping("/home");
}
public String saveImgAndShow(InputStream in,MultipartFile file,ModelMap mm,String p,String userId,String fileName){
try {
in = file.getInputStream();
//BufferedImage sourceImg = javax.imageio.ImageIO.read(in);
Image srcImg = ImageIO.read(in);
int width = srcImg.getWidth(null);
int height = srcImg.getHeight(null);
if(width>PICTURE_WIDTH || height>PICTURE_HEIGHT){
this.addMessage(mm, "avatar_mistake", "上传失败:文件尺寸应该在188*188之内");
return forwardMapping("/myavatars");
}else{
//写入电脑,写入文件的id为用户id
File source = new File(p+"/"+customerFolderPath+"/"+userId+"."+(getFileType(fileName)));
file.transferTo(source);
userManageService.setUserProperty(userId, "avatar",customerFolderPath+"/"+userId+"."+(getFileType(fileName)));
return forwardMapping("/home");
}
}catch(Exception e){
this.addMessage(mm, "avatar_mistake", "系统错误,上传失败");
return forwardMapping("/myavatars");
}
}
@RequestMapping("myavatars_pic.do")
public void myavatarsPic(HttpServletResponse response){
//String p = System.getenv(systemPath);
String p = systemPath;
String userId = this.getLoginUser().getId();
String path = userQueryService.getUserExtProperty(userId, "avatar");
if(path!=null&&!"".equals(path)){
try {
outPutImg(response,p+"/"+path);
} catch (IOException e) {
log.error("系统错误:读取图片失败");
}
}else{
try {
outPutImg(response,p+"/"+systemFolderPath+"/me.jpg");
} catch (IOException e) {
log.error("系统错误:读取图片失败");
}
}
}
public void outPutImg(HttpServletResponse response,String path) throws IOException{
response.setContentType("image/gif");
OutputStream os = response.getOutputStream();
File f = new File(path);
InputStream is = new FileInputStream(f);
byte[] bs = new byte[1024];
int len;
while((len=is.read(bs))!=-1){
os.write(bs,0,len);
}
is.close();
os.close();
}
public String getFileName(String path){
return path.substring(path.lastIndexOf("/")+1,path.length());
}
public String getFileType(String path){
return path.substring(path.lastIndexOf(".")+1,path.length());
}
public void setCustomerFolderPath(String customerFolderPath) {
this.customerFolderPath = customerFolderPath;
}
}
import java.awt.Image;
import java.io.File;
import com.bestlinkstudio.bsp.user.service.UserManageService;
import com.bestlinkstudio.bsp.user.service.UserQueryService;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
@Controller
public class UserAvatarsController extends BaseController{
private static final Log log = LogFactory.getLog("avatars");
public static final int PICTURE_HEIGHT=188;//
public static final int PICTURE_WIDTH=188;//
public static final int PICTURE_SIZE=10000000;
/**
* 注入系统图片数量
*/
private int systemAvatarsSize=0;
/**
* 注入系统头像文件夹名称
*/
private String systemFolderPath=null;
/**
* 用户上传头像文件夹名称
*
*/
private String customerFolderPath=null;
/**
* 环境变量名称
* @param systemFolderPath
*/
private String systemPath=null;
@Autowired
private UserManageService userManageService;
@Autowired
private UserQueryService userQueryService;
/*
public void setUserManageService(UserManageService userManageService) {
this.userManageService = userManageService;
}*/
public void setSystemPath(String systemPath) {
this.systemPath = systemPath;
}
public void setSystemFolderPath(String systemFolderPath) {
this.systemFolderPath = systemFolderPath;
}
public void setSystemAvatarsSize(int systemAvatarsSize) {
this.systemAvatarsSize = systemAvatarsSize;
}
@RequestMapping("/myavatars")
public String getMyAvatars() {
return "avatars";
}
/**
* 此AJAX控制器,返回所有系统图片的路径
* @param response
* @return
*/
@ResponseBody
@RequestMapping("/avatars")
public ResponseEntity<String[]> getAvatarsAddress(HttpServletRequest request ,HttpServletResponse response) {
//String realPath = request.getSession().getServletContext().getRealPath("/");
//D:\Tomcat 6.0\webapps\ROOT\
String path = null;
String[] message = new String[systemAvatarsSize];
for(int i=0;i<systemAvatarsSize;i++){
int k = i+1;
path = "avatarsread.do?pic="+systemFolderPath+"/"+k+".gif";
message[i] = path;
}
HttpHeaders hd = new HttpHeaders();
hd.setContentType(MediaType.parseMediaType("text/plain;charset=utf-8"));
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
return new ResponseEntity<String[]>(message, hd, HttpStatus.OK);
}
/**
* 通过路径得到系统图片,返回
* @param pic
* @param response
*/
@RequestMapping("/avatarsread")
public void getAvatarsContent(String pic,HttpServletResponse response){
//String p = System.getenv(systemPath);
String p = systemPath;
String folder = pic.substring(0,pic.indexOf("/"));
//如果是pic的文件夹是系统文件夹
if(systemFolderPath.equals(folder)){
response.setContentType("image/gif");
try {
OutputStream os = response.getOutputStream();
File f = new File(p+"/"+pic);
InputStream is = new FileInputStream(f);
byte[] bs = new byte[1024];
int len;
while((len=is.read(bs))!=-1){
os.write(bs,0,len);
}
is.close();
os.close();
} catch (Exception e) {
log.error("系统错误:读取系统图片失败");
}
}
}
/**
*
* @param userId 用户ID
* @param systemPath 系统头像路径
* @param files 上传的头像
* @return
*/
@RequestMapping("/saveavatars")
public String saveAvatars(String avsystemPath , HttpServletRequest request,ModelMap mm,HttpServletResponse response){
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
//String p = System.getenv(systemPath);
String p = systemPath;
String userId = this.getLoginUser().getId();
MultipartFile file = multipartRequest.getFile("files");
//上传的文件名字
String fileName = file.getOriginalFilename();
//系统的文件名字
String systemName = getFileName(avsystemPath);
String regex = ".*\\.(jpg|jpeg|gif|bmp)$";
InputStream in=null;
if("".equals(fileName)&&"".equals(avsystemPath)){
userManageService.setUserProperty(userId, "avatar", "");
return forwardMapping("/home");
}
if("".equals(fileName)&&!"".equals(avsystemPath)){
//表明用户选择了系统头像
userManageService.setUserProperty(userId, "avatar", avsystemPath);
}else if("".equals(avsystemPath)&&!"".equals(fileName)){
//表明用户自己上传头像
if(!fileName.matches(regex)){
this.addMessage(mm, "avatar_mistake", "上传失败:文件类型错误");
return forwardMapping("/myavatars");
}else if(file.getSize()>PICTURE_SIZE || file.getSize()==0){
this.addMessage(mm, "avatar_mistake", "上传失败:上传文件尺寸错误");
return forwardMapping("/myavatars");
}else{
return saveImgAndShow(in,file,mm,p,userId,fileName);
}
}else{
//这里2个地方都有值,还是上传
return saveImgAndShow(in,file,mm,p,userId,fileName);
}
return forwardMapping("/home");
}
public String saveImgAndShow(InputStream in,MultipartFile file,ModelMap mm,String p,String userId,String fileName){
try {
in = file.getInputStream();
//BufferedImage sourceImg = javax.imageio.ImageIO.read(in);
Image srcImg = ImageIO.read(in);
int width = srcImg.getWidth(null);
int height = srcImg.getHeight(null);
if(width>PICTURE_WIDTH || height>PICTURE_HEIGHT){
this.addMessage(mm, "avatar_mistake", "上传失败:文件尺寸应该在188*188之内");
return forwardMapping("/myavatars");
}else{
//写入电脑,写入文件的id为用户id
File source = new File(p+"/"+customerFolderPath+"/"+userId+"."+(getFileType(fileName)));
file.transferTo(source);
userManageService.setUserProperty(userId, "avatar",customerFolderPath+"/"+userId+"."+(getFileType(fileName)));
return forwardMapping("/home");
}
}catch(Exception e){
this.addMessage(mm, "avatar_mistake", "系统错误,上传失败");
return forwardMapping("/myavatars");
}
}
@RequestMapping("myavatars_pic.do")
public void myavatarsPic(HttpServletResponse response){
//String p = System.getenv(systemPath);
String p = systemPath;
String userId = this.getLoginUser().getId();
String path = userQueryService.getUserExtProperty(userId, "avatar");
if(path!=null&&!"".equals(path)){
try {
outPutImg(response,p+"/"+path);
} catch (IOException e) {
log.error("系统错误:读取图片失败");
}
}else{
try {
outPutImg(response,p+"/"+systemFolderPath+"/me.jpg");
} catch (IOException e) {
log.error("系统错误:读取图片失败");
}
}
}
public void outPutImg(HttpServletResponse response,String path) throws IOException{
response.setContentType("image/gif");
OutputStream os = response.getOutputStream();
File f = new File(path);
InputStream is = new FileInputStream(f);
byte[] bs = new byte[1024];
int len;
while((len=is.read(bs))!=-1){
os.write(bs,0,len);
}
is.close();
os.close();
}
public String getFileName(String path){
return path.substring(path.lastIndexOf("/")+1,path.length());
}
public String getFileType(String path){
return path.substring(path.lastIndexOf(".")+1,path.length());
}
public void setCustomerFolderPath(String customerFolderPath) {
this.customerFolderPath = customerFolderPath;
}
}