java ftp上传

ftp上传:主要条件是 如果没有上传的文件,那么要传一个url链接,反正是怎么传要传一个东东上去!大家懂的

  <!--这个是上传文件 -->
<s:file id="fdoc" name="doc" size="30" οnchange="isFileType(this)"  />
  <!--这个是上传url-->
<input type="text" name="urlName" style=" border: 1px solid #F9B2B2; color: #c20000; width: 260px;"/>

提交的时候调用struts,xml

<action name="malCodeInsertAction"
			class="edu.xjtu.sei.skyeye.web.malcode.MalCodeInsertAction">
			<!-- 上传木马的拦截器 -->
			<interceptor-ref name="fileUpload">
				<param name="maximumSize">10241024000</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack" />
			<result type="redirectAction">lstMalCodeAction.action</result>
		</action>
进入请求的action

public String execute() {
		try{
			UserInfo ui=(UserInfo) ServletActionContext.getRequest().getSession().getAttribute("userInfo");
			malCodeWeb.setMalwebUsernameC(ui.getTrueName());
			malCodeWeb.setMalwebUsertelC(ui.getUserTel());
			malCodeWeb.setMalwebUseremailC(ui.getUserEmail());
			if(null!=malTime){
				malCodeWeb.setMalwebsettime(Long.getLong(malTime));
			}else{
				malCodeWeb.setMalwebsettime(null);
			}
			malCodeWeb.setMalwebTimeT( new java.sql.Timestamp(new java.util.Date().getTime()));
			if(null!=doc){
				malCodeWeb.setMalwebTypeN(1);
				fileType=1;
			}else{
				malCodeWeb.setMalwebTypeN(2);
				fileType=2;
			}
			malCodeWeb.setMalwebFilenameC(docFileName==null?urlName:docFileName);
			malCodeWeb.setMalwebUrlC(urlName);
			malCodeWeb.setmalwebRemarkC(remark);
			long fileSize;
			HttpServletRequest request = ServletActionContext.getRequest (); //获取request
			if(doc!=null){
				malCodeWeb.setMalwebMd5C(this.getMD5(doc));//对上传文件作MD5加密
				fileSize=doc.length();
				
			}else{//url生成文件再加密
				String path=request.getSession().getServletContext().getRealPath("/");
				urlFile=new File(path+"/pages/"+this.generateFileName());
		    	FileWriter fw=new FileWriter(urlFile);
		    	fw.write(urlName);
		    	fw.close();
		    	malCodeWeb.setMalwebMd5C("");
		    	fileSize=urlFile.length();
			}
			//保存字节Byte
			malCodeWeb.setMalwebFilesizeN(fileSize);
			this.malCodeWebDAO.save(malCodeWeb);
			this.malCodeWebDAO.getHibernateTemplate().flush();
			String ftpFileName=null;
			//ftp文件上传
			//读取ftp用户和密码,服务器地址
			String xmlPath=request.getSession().getServletContext().getRealPath("/")+"/ftpPwd.xml";
			File f=new File(xmlPath);
			Map<?, ?> map=this.malCodeWebDAO.readFtpXml(f);
			connectServer(map.get("server").toString(), map.get("userName").toString(), 
						  map.get("pwd").toString(),"malweb");
			
		    if(fileType==1){
		    	//获取文件后缀名
		    	String ftFile=docFileName.substring(docFileName.lastIndexOf("."));
		    	//重命名
		    	ftpFileName="malWeb_"+malCodeWeb.getMalwebIdN()+ftFile;
		    	//exe,dll文件上传失败,删除数据库相应数据
		    	if(upload(doc,ftpFileName).equals("false")){
		    		this.malCodeWebDAO.delete(malCodeWeb);
		    		request.setAttribute("msg", "系统故障,请与管理员联系!");
		    	}else{
		    		request.setAttribute("msg", "数据添加成功!");
		    	}
		    }else{
		    	ftpFileName="malWeb_"+malCodeWeb.getMalwebIdN()+".url";
		    	//url文件上传失败,删除数据库相应数据
		    	if(upload(urlFile,ftpFileName).equals("false")){
		    		this.malCodeWebDAO.delete(malCodeWeb);
		    		request.setAttribute("msg", "系统故障,请与管理员联系!");
		    	}else{
		    		request.setAttribute("msg", "数据添加成功!");
		    	}
		    	//删除生成的url临时文件
		    	if(urlFile.delete()){
		    		System.out.println(urlFile.getName()+ "文件已删除");
		    	}
		    }
		}catch(Exception e){
			e.printStackTrace();
		
		}finally{
			//关闭ftp连接
			try {
				ftpClient.closeServer();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return SUCCESS;
	}

ftp连接服务器

private void connectServer(String server, String user, String password,
			String path) throws IOException {
			// server:FTP服务器的IP地址;user:登录FTP服务器的用户名
			// password:登录FTP服务器的用户名的口令;path:FTP服务器上的路径
			ftpClient = new FtpClient();
			ftpClient.openServer(server);
			ftpClient.login(user, password);
//			if (path.length() != 0)
//			//ftpClient.cd("\\");
//			ftpClient.cd("malWeb");
			//用2进制上传
			ftpClient.binary();
			System.out.println(ftpClient.welcomeMsg);
			System.out.println("已登录到\"" + ftpClient.pwd() + "\"目录");   
			}

上传文件

private String upload(File file_in,String ftpFileName) throws Exception {
			TelnetOutputStream os = null;
			FileInputStream is = null;
			try {
				//用ftp上传后的新文件名
				os = ftpClient.put(ftpFileName);
				if (file_in.length()==0) {
					return "false";
				}
				is = new FileInputStream(file_in);
				byte[] bytes = new byte[1024];
				int c;
				while ((c = is.read(bytes)) != -1) {
					os.write(bytes, 0, c);
				}
			} catch(Exception e){
				e.printStackTrace();
				return "false";
			}finally {
				if (is != null) {
					is.close();
				}
				if (os != null) {
					os.close();
				}
			}
			return "success";
	}

修改上传文件名称格式

 private String generateFileName() {
		 	//获取当前时间,精确到秒
		    DateFormat format = new SimpleDateFormat("yyMMddHHmmss");   
		    String formatDate = format.format(new Date());
		   //随机数
		    int random = new Random().nextInt(10000);   
		   return formatDate + random + ".url";   
  }   
MD5加密设置

private String getMD5(File file) {
		  String MD5 = "";
		  try {
		   FileInputStream fos = new FileInputStream(file);
		   MessageDigest alga = MessageDigest.getInstance("MD5");
		   byte[] buffer = new byte[1024];// 设置填充大小
		   int read;//实际读取的字节数
		   while ((read = fos.read(buffer, 0, 1024)) > 0) {
			   alga.update(buffer, 0, read);
		   }
		   byte[] digesta = alga.digest();
		   for (int i = 0; i < digesta.length; i++) {
		    MD5 += Integer.toHexString(
		      (0x000000ff & digesta[i]) | 0xffffff00).substring(6);
		   }
		  } catch (Exception e1) {
			  e1.printStackTrace();
		  }
		  return MD5;
		 } 



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值