您的位置:首页 > 其它

上传到云和删除的简单应用

2015-12-30 12:16 453 查看
这段时间刚刚接触hadoop这个东西,简单的应用了一下,具体的应该是模仿应用,看代码:

spring中配置扫描配置文件:

applicationContext.xml

<bean id="propertyConfigurer"
class="cn.edu.hbcf.vo.CustomizedPropertyConfigurer">
<property name="locations">
<list>
<value>classpath:system.properties</value>
</list>
</property>
</bean>


配置文件代码如下:

system.properties:



controller如下:

DFSController如下:

package cn.edu.hbcf.cloud.hadoop.dfs.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import cn.edu.hbcf.cloud.hadoop.dfs.service.DFSService;
import cn.edu.hbcf.cloud.hadoop.dfs.vo.DfsInfo;
import cn.edu.hbcf.common.constants.WebConstants;
import cn.edu.hbcf.common.hadoop.CFile;
import cn.edu.hbcf.common.hadoop.FileManager;
import cn.edu.hbcf.common.hadoop.FileSysFactory;
import cn.edu.hbcf.common.hadoop.FileSysType;
import cn.edu.hbcf.common.vo.Criteria;
import cn.edu.hbcf.common.vo.ExceptionReturn;
import cn.edu.hbcf.common.vo.ExtFormReturn;
import cn.edu.hbcf.plugin.oa.pojo.NoteBook;
import cn.edu.hbcf.privilege.pojo.BaseUsers;

@Controller
@RequestMapping("/dfs")
public class DFSController {
@Autowired
private DFSService dfsService;

@RequestMapping(method=RequestMethod.GET)
public String index(HttpServletRequest request,HttpSession session,Model model){

return "plugins/cloud/web/views/hadoop/dfs/dfs";
}

@RequestMapping(value = "/play",method=RequestMethod.GET)
public String play(HttpServletRequest request,HttpSession session,Model model){

return "plugins/cloud/web/views/hadoop/dfs/play";
}

@RequestMapping("/upload")
public void upload(@RequestParam MultipartFile file, HttpServletRequest request, HttpServletResponse response){
String uploadFileName = file.getOriginalFilename();
FileManager fileMgr=FileSysFactory.getInstance(FileSysType.HDFS);
String path=request.getParameter("path");
HttpSession session=request.getSession(true);
BaseUsers u = (BaseUsers) session.getAttribute(WebConstants.CURRENT_USER);
// 获取文件后缀名
String fileType = StringUtils.substringAfterLast(uploadFileName, ".");
String saveName = UUID.randomUUID().toString().replace("-", "")+("".equals(fileType) ? "" : "." + fileType);
String filePath="/filesharesystem/"+u.getAccount()+path;
try {
fileMgr.putFile(file.getInputStream(), filePath, saveName);
System.out.println("path="+filePath+" uploadFileName="+uploadFileName);
StringBuffer buffer = new StringBuffer();
buffer.append("{success:true,fileInfo:{fileName:'").append(uploadFileName).append("',");
buffer.append("filePath:'").append(filePath+saveName).append("',");
buffer.append("projectPath:'").append(filePath+saveName).append("',");
buffer.append("storeName:'").append(saveName).append("',");
buffer.append("fileSize:").append((float)file.getSize()/1024);
buffer.append("}}");
response.setContentType("text/html;charset=utf-8;");
response.getWriter().write(buffer.toString());
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@RequestMapping(value="/downloadFile", method = RequestMethod.GET)
public void download(HttpServletRequest request, HttpServletResponse response,String filePath,String fileName) {
//String fileName=request.getParameter("fileName");
try {
fileName=new String(fileName.getBytes("ISO-8859-1"),"UTF-8");
filePath=new String(filePath.getBytes("ISO-8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

OutputStream output = null;
BufferedInputStream bis=null;
BufferedOutputStream bos=null;
FileManager fileMgr=FileSysFactory.getInstance(FileSysType.HDFS);
//response.setContentType("application/x-msdownload");
//response.setCharacterEncoding("UTF-8");
try {
output = response.getOutputStream();
response.setHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("gbk"),"iso-8859-1"));
bis=new BufferedInputStream(fileMgr.getFile(filePath));
bos=new BufferedOutputStream(output);
byte[] buff=new byte[2048];
int bytesRead;
while(-1!=(bytesRead=bis.read(buff,0,buff.length))){
bos.write(buff,0,bytesRead);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{
if(bis!=null)
try {
bis.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(bos!=null)
try {
bos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}
@RequestMapping("/delete")
public void delete(String path, HttpServletResponse response){
FileManager fileMgr=FileSysFactory.getInstance(FileSysType.HDFS);
try {
fileMgr.deleteFile(path);
StringBuffer buffer = new StringBuffer();
buffer.append("{success:true}");
response.setContentType("text/html;charset=utf-8;");
response.getWriter().write(buffer.toString());
response.getWriter().flush();
response.getWriter().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@RequestMapping(value ="/queryMovie",method=RequestMethod.GET)
public void queryMovie( HttpServletRequest request, HttpServletResponse response){
response.setContentType("application/octet-stream");
FileManager fileMgr = FileSysFactory.getInstance(FileSysType.HDFS);
FSDataInputStream fsInput = fileMgr.getStreamFile("/filesharesystem/admin/test/a.swf");
OutputStream os;
try {
os = response.getOutputStream();
IOUtils.copyBytes(fsInput, os, 4090, false);
os.flush();
os.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

/**
* 根据提交的路径,从云上获取swf格式和picture文档内容
*/
@RequestMapping(value = "/queryResource", method = RequestMethod.GET)
public void queryResource(HttpServletRequest request,
HttpServletResponse response, String resourcePath) {
response.setContentType("application/octet-stream");
FileManager fileMgr = FileSysFactory.getInstance(FileSysType.HDFS);
FSDataInputStream fsInput = fileMgr.getStreamFile(resourcePath);
OutputStream os = null;
try {
os = response.getOutputStream();
IOUtils.copyBytes(fsInput, os, 4090, false);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally{

try {
if(os != null){
os.flush();
os.close();
}
if(fsInput!= null){
fsInput.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

@RequestMapping(value = "/queryListForTree", method = RequestMethod.POST)
@ResponseBody
public List<CFile> queryListForTree(HttpServletRequest request) {
HttpSession session=request.getSession(true);
BaseUsers u = (BaseUsers) session.getAttribute(WebConstants.CURRENT_USER);
Criteria criteria = new Criteria();
criteria.put("username", u.getAccount());
return dfsService.queryListForTree(criteria);
}

@RequestMapping(value="/status",method=RequestMethod.GET)
public String dfsIndex(HttpServletRequest request,HttpSession session,Model model){

return "plugins/cloud/web/views/hadoop/dfs/dfsStatus";
}

@RequestMapping(value="/status", method = RequestMethod.POST)
@ResponseBody
public Object get(HttpSession session){
try{
DfsInfo dfs = dfsService.getDfsInfo();
if(dfs != null){
return new ExtFormReturn(true,dfs);
}else{
return new ExtFormReturn(false);
}

}catch(Exception e){

e.printStackTrace();
return new ExceptionReturn(e);

}

}

@RequestMapping(value="/dataNode", method = RequestMethod.POST)
@ResponseBody
public Object dataNode(){
try{
return dfsService.getDataNodeList();

}catch(Exception e){

e.printStackTrace();
return new ExceptionReturn(e);

}

}
}


重点应用了,上传,删除,查询云操作

其中,hadoop的几个实体类如下:

CFile.java

package cn.edu.hbcf.common.hadoop;

import java.util.List;

public class CFile {
private String name;
private long size;
private int leaf;
private String createTime;
private List<CFile> children;
private String fullPath;

public String getFullPath() {
return fullPath;
}
public void setFullPath(String fullPath) {
this.fullPath = fullPath;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getSize() {
return size;
}
public void setSize(long size) {
this.size = size;
}
public int getLeaf() {
return leaf;
}
public void setLeaf(int leaf) {
this.leaf = leaf;
}
public List<CFile> getChildren() {
return children;
}
public void setChildren(List<CFile> children) {
this.children = children;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
}


FileManager.java

package cn.edu.hbcf.common.hadoop;

import java.io.DataInputStream;
import java.io.InputStream;
import java.util.List;

import org.apache.hadoop.fs.FSDataInputStream;

public interface FileManager {
public void createDirForUser(String dirName);
public boolean isDirExistForUser(String uname);
public void deleteFile(String fileName);
public void getFile(String userName,String remoteFileName,String localFileName);
public void putFile(String directoryName,String remoteFileName,String localFileName);
public List<CFile> listFileForUser(String uname,String filePrefix);
public void putFile(InputStream input,String path,String remoteFileName);
public DataInputStream getFile(String remoteFileName);
public FSDataInputStream getStreamFile(String remoteFileName);

public boolean isFileExist(String filePath);
}


FileSysFactory.java

package cn.edu.hbcf.common.hadoop;

public class FileSysFactory {
private static FileManager instanceApacheHDFS=null;
private final static FileManager instanceNormalFileSys=null;
public static synchronized FileManager getInstance(FileSysType fileSysType){
switch(fileSysType){
case HDFS:
if(instanceApacheHDFS==null){
instanceApacheHDFS=new HDFSFileManager();
}

return instanceApacheHDFS;
case NormalFileSys:

}
return null;
}
}


FileSysType.java

package cn.edu.hbcf.common.hadoop;

public enum FileSysType {
HDFS,NormalFileSys
}


HDFSFileManager.java

package cn.edu.hbcf.common.hadoop;

import java.io.BufferedInputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import cn.edu.hbcf.common.springmvc.CustomizedPropertyConfigurer;

public class HDFSFileManager implements FileManager {
private final static String root_path="/filesharesystem/";
private static FileSystem fs=null;
public HDFSFileManager(){
if(fs==null){
try{
Configuration conf=new Configuration(true);
String url =(String)CustomizedPropertyConfigurer.getContextProperty("hdfs.URL");
//conf.set("fs.default.name", url);
conf.set("fs.defaultFS", url);
fs=FileSystem.get(conf);
}catch(IOException e){
e.printStackTrace();
}
}
}
public void createDirForUser(String dirName) {
// TODO Auto-generated method stub
try {
Path f=new Path(root_path);
fs.mkdirs(new Path(f,dirName));

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

public void deleteFile(String fileName) {
// TODO Auto-generated method stub
try{
Path f=new Path(fileName);
fs.delete(f);
}catch(IOException e){
e.printStackTrace();
}
}

public void getFile(String userName, String remoteFileName,
String localFileName) {
// TODO Auto-generated method stub

}

public DataInputStream getFile(String remoteFileName) {
// TODO Auto-generated method stub
try {
return fs.open(new Path(remoteFileName));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

public FSDataInputStream getStreamFile(String remoteFileName) {
// TODO Auto-generated method stub
try {
return fs.open(new Path(remoteFileName));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}

public boolean isDirExistForUser(String uname) {
// TODO Auto-generated method stub
Path f=new Path(root_path+uname);
try {
return fs.exists(f);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}

public List<CFile> listFileForUser(String uname, String filePrefix) {
List<CFile> list=new ArrayList<CFile>();
String fp=root_path+uname+"/"+filePrefix;
Path path=new Path(fp);
try {
FileStatus[] stats = fs.listStatus(path);
for(int i=0;i<stats.length;i++){
CFile file=new CFile();
int len=stats[i].getPath().toString().lastIndexOf("/");
String fileName=stats[i].getPath().toString().substring(len+1);
java.text.Format formatter=new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String createTime=formatter.format(stats[i].getModificationTime());
if(stats[i].isDir()){
file.setLeaf(0);
file.setSize(stats[i].getBlockSize());
file.setName(fileName);
file.setCreateTime(createTime);
String newpath=filePrefix+"/"+fileName;
file.setChildren(listFileForUser(uname,newpath));
file.setFullPath(stats[i].getPath().toString().replace("hdfs://master:9000", ""));
list.add(file);

}else{
file.setLeaf(1);
file.setName(fileName);
file.setCreateTime(createTime);
file.setFullPath(stats[i].getPath().toString().replace("hdfs://master:9000", ""));
list.add(file);
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return list;
}

public void putFile(String directoryName, String remoteFileName,
String localFileName) {
// TODO Auto-generated method stub

}

public void putFile(InputStream input, String path,
String remoteFileName) {
// TODO Auto-generated method stub
final int taskSize=1024;
BufferedInputStream istream=null;
DataOutputStream ostream=null;
istream=new BufferedInputStream(input);
try {
ostream=fs.create(new Path(path+"/"+remoteFileName));
int bytes;
byte[] buffer=new byte[taskSize];
while((bytes=istream.read(buffer))>=0){
ostream.write(buffer,0,bytes);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(istream!=null)
istream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if(ostream!=null)
ostream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public boolean isFileExist(String filePath) {
// TODO Auto-generated method stub
Path f=new Path(filePath);
try {
return fs.exists(f);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}

}


用到的几个jar包:

<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.10.3</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.4.0</version>
<exclusions>
<exclusion>
<artifactId>jasper-runtime</artifactId>
<groupId>tomcat</groupId>
</exclusion>
<exclusion>
<artifactId>jasper-compiler</artifactId>
<groupId>tomcat</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<!-- <version>2.0.0-cdh4.4.0</version>   -->
<version>2.2.0</version>
<exclusions>
<exclusion>
<artifactId>jdk.tools</artifactId>
<groupId>jdk.tools</groupId>
</exclusion>
</exclusions>
</dependency>


最后,需要配置一下环境变量:

HADOOP_HOME
C:\Users\Promise\Desktop\hadoop-common-2.2.0-bin-master




内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: