package com.zdcf.action;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
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 com.zdcf.model.FileExchange;
import com.zdcf.model.GoogleSearchResult;
import com.zdcf.service.FileService;
import com.zdcf.service.GoogleService;
import com.zdcf.tool.ProxyUtil;
import com.zdcf.tool.Tools;
@Controller
@RequestMapping("/google")
public class GoogleAction {
private static Logger logger = Logger.getLogger(GoogleAction.class);
private static final int pageSize = 10;
@Autowired
private FileService fileService;
@Autowired
private GoogleService googleService;
@RequestMapping("/index")
public String toGoogleList(HttpServletRequest request,ModelMap model){
String ip = Tools.getNoHTMLString(getIpAddr(request));
logger.info("ip:"+ip+"进入google搜索");
return "google/index";
}
@RequestMapping("/search")
public String search(HttpServletRequest request,ModelMap model,String wd) throws ClientProtocolException, IOException{
String ip = Tools.getNoHTMLString(getIpAddr(request));
List<GoogleSearchResult> list = googleService.search(wd);
logger.info("ip:"+ip+"搜索了"+wd);
model.addAttribute("list", list);
return "google/search";
}
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Real-IP");
if (null != ip && !"".equals(ip.trim())
&& !"unknown".equalsIgnoreCase(ip)) {
return ip;
}
ip = request.getHeader("X-Forwarded-For");
if (null != ip && !"".equals(ip.trim())
&& !"unknown".equalsIgnoreCase(ip)) {
// 多次反向代理后会有多个IP值,第一个为真实IP。
int index = ip.indexOf(',');
if (index != -1) {
return ip.substring(0, index);
} else {
return ip;
}
}
return request.getRemoteAddr();
}
public Map<String, Object> initMapStatus() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("status", Boolean.TRUE);
map.put("msg", "");
return map;
}
@ResponseBody
@RequestMapping("/fileExchange")
public Map<String, Object> fileExchange(String url,HttpServletRequest request) throws IOException{
Map<String, Object> map = new HashMap<String, Object>();
FileExchange fileExchange =fileService.getFileExchange(url);
if(null==fileExchange){
FileExchange newfileExchange = new FileExchange();
DefaultHttpClient httpClient = (DefaultHttpClient) ProxyUtil.getHttpClient();
OutputStream out = null;
InputStream in = null;
String fileExt = FilenameUtils.getExtension(url);
String newUrl = UUID.randomUUID().toString().replaceAll("-", "")+"."+fileExt;
newfileExchange.setOldUrl(url);
newfileExchange.setNewUrl(newUrl);
HttpGet httpGet = new HttpGet(url);
HttpResponse httpResponse = httpClient.execute(httpGet);
HttpEntity entity = httpResponse.getEntity();
in = entity.getContent();
long length = entity.getContentLength();
if (length <= 0) {
System.out.println("下载文件不存在!");
}
File file = new File(request.getSession().getServletContext().getRealPath("/")+"uploadfile/"+newUrl);
if(!file.exists()){
file.createNewFile();
}
out = new FileOutputStream(file);
IOUtils.copy(in, out);
// byte[] buffer = new byte[10240];
// int readLength = 0;
// while ((readLength=in.read(buffer)) > 0) {
// byte[] bytes = new byte[readLength];
// System.arraycopy(buffer, 0, bytes, 0, readLength);
// out.write(bytes);
// }
out.flush();
//避免资源泄露,分开关闭
try{
if(in != null){
in.close();
}
}catch(Exception e){
e.printStackTrace();
}
try{
if(out != null){
out.close();
}
}catch(Exception e){
e.printStackTrace();
}
fileService.addFileExchange(newfileExchange);
map.put("url", newfileExchange.getNewUrl());
}else{
map.put("url", fileExchange.getNewUrl());
}
return map;
}
}