文件上传服务器、 文件上传ftp

里面包涵两部分内容 ,可以拆开来用,文件上传到服务器  文件上传到ftp

@RequestMapping(value="uploadFile_old")
	@ResponseBody
	public Object uploadFile_old(HttpServletRequest request,HttpServletResponse response)throws IOException
	{
		Map<String,Object> resMap=Maps.newHashMap();
		boolean result=false;
		String Ip = request.getParameter("IpAddr");
		int ftpPort = 3121;
		String ftpName = "root";
		String ftpPwd = "hisome";
		String ftpUrl = "//home";
		String fileUrl=request.getParameter("fileUrl");
		
		//F:\jzkz-web\jzkz-web_two\src\main\webapp
		String courString = request.getSession().getServletContext().getRealPath("");
		String SerPath=courString+"\\upFile";
		File file = new File(fileUrl);
		//得到上传的文件名称,
		String filename =file.getName();
		//spectrum_bg.data
		filename = filename.substring(filename.lastIndexOf("\\")+1);
		
		boolean createFileIsOk=false;
		//新建临时文件 创建目录  
		File dir = new File(SerPath);  
        if (dir.exists()) {  
            System.out.println("目标目录已经存在");
            File files = new File(SerPath+"\\"+filename);  
            if (files.exists()) { 
            	files.delete();
            }
            createFileIsOk= true;  
        }else{
        	//创建目录  
            if (dir.mkdirs()) {  
                createFileIsOk= true;  
            }else{  
                createFileIsOk= false;  
            }
        }
        if (!SerPath.endsWith(File.separator)) {  
        	SerPath = SerPath + File.separator;  
        }  
          
		// 把文件先上传到服务器上
		if(createFileIsOk){
			//获取上传文件的输入流
			FileInputStream input = new FileInputStream(file);
			 //创建一个文件输出流
			FileOutputStream out = new FileOutputStream(SerPath + "\\" + filename);
			 //创建一个缓冲区
			byte buffer[] = new byte[1024];
			//判断输入流中的数据是否已经读完的标识
			int len = 0;
			//循环将输入流读入到缓冲区当中,(len=input.read(buffer))>0就表示in里面还有数据
			while((len=input.read(buffer))>0){
				//使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(SerPath + "\\" + filename)当中
				out.write(buffer, 0, len);
			}
			//关闭输入流
			input.close();
			//关闭输出流
			out.close();
			System.out.println("上传服务器成功!");
			FTPClient ftp = new FTPClient();   
			boolean connectRes=false;
			int reply;
			try{
				ftp.connect(Ip,ftpPort);      
				ftp.login(ftpName,ftpPwd);      
				ftp.setFileType(FTPClient.BINARY_FILE_TYPE);      
				reply = ftp.getReplyCode();      
				if (!FTPReply.isPositiveCompletion(reply)) {      
					ftp.disconnect();  
				}else{
					ftp.changeWorkingDirectory(ftpUrl);
					System.out.println(ftpUrl);
					connectRes = true;  
				}
			}catch(Exception e){
				
			}
			if(connectRes){
				System.out.println("connectRes  is true");
				try{
					File newfile = new File(SerPath+"\\"+filename);
					upload(newfile,ftp);
					result=true;
				}catch(Exception e){
					System.out.println("upload error");
					result=false;
				}
			}
		}else{
			result=false;
		}
		//删除处理文件上传时生成的临时文件
		//dir.delete();
		resMap.put("message",result);
		return resMap;
	}
	private static void upload(File file,FTPClient ftp) throws Exception{
		if(file.isDirectory()){    //如果path表示的是一个目录则返回true        
			ftp.makeDirectory(file.getName());                
			ftp.changeWorkingDirectory(file.getName());
			ftp.enterLocalPassiveMode();
			String[] files = file.list(); 
			
			for (int i = 0; i < files.length; i++) {      
				File file1 = new File(file.getPath()+"\\"+files[i] );      
				if(file1.isDirectory()){
					upload(file1,ftp);
					ftp.changeToParentDirectory();
				}else{
					File file2 = new File(file.getPath()+"\\"+files[i]);
					FileInputStream input = new FileInputStream(file2);
					ftp.storeFile(file2.getName(), input);
					input.close();
				}
			}
		}else{
			ftp.enterLocalPassiveMode();
			System.out.println("++++ : "+file.getPath());
			
			File file2 = new File(file.getPath());
			FileInputStream input = new FileInputStream(file2);
			boolean aa=ftp.storeFile(file2.getName(), input);
			System.out.println("ftp.storeFile : "+aa);
			input.close();
		}
	}

存在隐藏bug,别的电脑访问服务器,上传文件会出问题,上传不成功!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值