文件上传到服务器_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 文件上传到服务器

文件上传到服务器

 2015/4/30 19:07:49  TableMiao  程序员俱乐部  我要评论(0)
  • 摘要:文件上传到服务器java实现本地文件上传到服务器。实现方式:rest接口模式提供上传服务头文件:@POST@Path("/upload")@Consumes("multipart/form-data")@Produces("text/plain;charset=utf-8")publicsynchronizedStringuploadDoc(MultipartFormDataInputinput,@ContextServletContextservletContext){logger.info
  • 标签:上传 文件 服务器 服务

文件上传到服务器

????? java实现本地文件上传到服务器。

????? 实现方式:

??????????? rest接口模式提供上传服务

????? 头文件

?????????

class="java" name="code">        @POST       
	@Path("/upload")    
	@Consumes("multipart/form-data")
	@Produces("text/plain; charset=utf-8")

?

?

?????

public synchronized String uploadDoc(MultipartFormDataInput input,
			@Context ServletContext servletContext) {
		logger.info("Began To Upload");
		Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
		List<InputPart> inputParts = uploadForm.get("Filedata");
		
		 //上传文件的web路径
		 String webPath = "/home/jike/tomcat-res1/webapps/shjkws";  
		 // 获取Web应用的路径	(也可以通过这种方式来获取)
		 //	final String realPath = servletContext.getRealPath(updatePath); 
		for (InputPart inputPart : inputParts) {
			try {
				//由于传输文件是以2进制的形式传输,所以通过流的方式读取文件名,避免中文名字乱码
				 InputPart a = uploadForm.get("Filename").get(0);
				 InputStream is = a.getBody(InputStream.class,
							null);
				//读取一遍名字
				ByteArrayOutputStream baos = new ByteArrayOutputStream();
				int i = -1;
				while ((i = is.read()) != -1) {
					baos.write(i);
				}
				String fileName = baos.toString("UTF-8");
				
				//也可以通过如下方式直接获取,不支持中文
				//String fileName = uploadForm.get("Filename").get(0)
				//		.getBodyAsString();
				logger.debug("上传文件的名字:{}",fileName);
				
				//截取上传文件后缀
				int pos = fileName.lastIndexOf('.');
				String fileTitle = fileName.substring(0, pos);//文件名字
				String fileHz = fileName.substring(pos);//文件后缀
				logger.debug("上传文件名称:{}  文件后缀:{}",fileTitle,fileHz);
				
				//自定义上传到服务器的文件格式,此处我定义的格式为
				//eg:知识库_故障报表20150428^20150428173419^.txt  
                                  //便于servlrt导出中文文件,详见文件下载、excel导出
				if (pos > 0) {
					fileName = "export" + File.separator + "知识库_"+fileTitle
							+ dayFormat.format(System.currentTimeMillis())
							+ fileHz;
				} else {
					fileName = "export" + File.separator + "知识库_"+fileTitle
					+ dayFormat.format(System.currentTimeMillis());
				}
				String realFile = webPath + File.separator + fileName;
				//查看文件是否存在,如果有就删掉,避免重复,根据需要使用
				fileOperate(realFile);
				//复制文件到服务器的另外位置,比如说部署了tomcat集群,挂了一个  
                                   //下载就找不到相应的路径,根据需要使用
				copyFile(realFile);
				
				//生成文件
				InputStream inputStream = inputPart.getBody(InputStream.class,
						null);
				File file = new File(realFile);
				FileUtils.copyInputStreamToFile(inputStream, file);
				logger.info("上传保存文件成功 返回生成的文件名:{}  , 真实路径 :{}", fileName,
						realFile);
				return fileName;
			} catch (Exception e) {
				throw new RuntimeException("上传文件异常!");
			}
		}
		return "没有上传文件!";
	}

?

???

      public void fileOperate(String realFile) {
		File file = new File(realFile);
		if (file.exists()) {
			logger.info("文件已经存在, 执行文件caozuo.html" target="_blank">删除操作");
			file.delete();
			logger.info("删除已经存在的文件, 文件名称: {}", realFile);
		}
	}

	public void copyFile(String realFileName) {
		String webp = realFileName;
		if (!StringUtils.isEmpty(webPath2)) {
			logger.info("copying file: {}", realFileName);
			webp = webp.replace(webPath, webPath2);
			File file = new File(webp);
			if (file.exists())
				file.delete();
			try {
				FileUtils.copyFile(new File(realFileName), new File(webp));
			} catch (IOException e) {
				e.printStackTrace();
			}
			logger.info("file copied: {}", webp);
		}
	}

??? 前台界面,调用接口实现即可。

????

发表评论
用户名: 匿名