栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java文件上传方法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java文件上传方法

@RequestMapping("/upload")
@RestController
@IgnoreToken
@SuppressWarnings("all")
public class FilesController extends BaseController {


    @Value("${upload.filePath}")
    private String filePath;//文件上传路径
    @Value("${upload.requestPath}")
    private String requestPath;//文件请求路径

    public String getRequestPath() {
        return requestPath;
    }

    public String getFilePath() {
        return filePath;
    }

    //允许的上传文件后缀类型
    @Value("${upload.allowExt}")
    private String allowExt;

    public String getAllowExt() {
        return allowExt;
    }

    //允许文件上传最大限制
    @Value("${upload.fileSize}")
    private String fileSize;

    public String getFileSize() {
        return fileSize;
    }

    @Value("${spring.application.name}")
    private String serviceName;

    public String getServiceName() {
        return serviceName;
    }

    //系统地址
    @Value("${upload.domain}")
    private String hostname;

    public String getHostname() {
        return hostname;
    }


    
    public String getFileName(String fileName) {
        if (fileName.length() > 0 && fileName.indexOf(".") > -1) {
            String ext;
            if (fileName.indexOf("?") > -1 && fileName.lastIndexOf("?") > fileName.lastIndexOf(".")) {
                ext = fileName.substring(fileName.lastIndexOf("."), fileName.lastIndexOf("?"));
            } else {
                ext = fileName.substring(fileName.lastIndexOf("."), fileName.length());
            }
            //限定支持
            if (!checkExt(ext)) {
                return "-1";//格式错误
            }
            return DateUtil.getCurrentDateStr() + "_" + UtilTools.getUUID() + ext;
        }
        return "";
    }

    
    public boolean checkExt(String ext) {
        if (ext.length() == 0) {
            return false;
        }
        String[] params = getAllowExt().split("\|");
        for (int i = 0; i < params.length; i++) {
            if (params[i].equals(ext)) {
                return true;
            }
        }
        return false;
    }

    
    @RequestMapping(value = "/uploadfiles", method = RequestMethod.POST)
    public Result loadingIn(MultipartHttpServletRequest mulRequest) throws Exception {

        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        request.getSession().setAttribute("language", "CN");
        
        Set> set = mulRequest.getFileMap().entrySet();
        Map listFile = new LinkedHashMap<>();
        //System.out.println("上传个数" + set.size());
        int i = 0;
        for (Map.Entry each : set) {
            MultipartFile file = each.getValue();


            //如果上传文件为空
            if (UtilTools.isEmpty(file.getOriginalFilename())) {
                continue;
            }
            //System.out.println("上传文件名:"+file.getOriginalFilename());
            String newName = getFileName(file.getOriginalFilename());
            //如果上传文件类型不允许
            if ("-1".equals(newName)) {
                return setResult("controller1007");
            }
            //System.out.println("fileSize:"+file.getSize());
            int filesize = Integer.parseInt(getFileSize());
            if (file.getSize() > filesize) {
                return setResult("controller1008" + UtilTools.fileSizeConver(filesize) + "");
            }

            i++;
        }
        //是否存在上传文件
        if (i == 0) {
            return setResult("controller1009");
        }


        //进行文件上传
        String uploadPath = mulRequest.getParameter("uploadPath");//获取其它元素值
        String filesPath = UtilTools.isEmpty(uploadPath) ? "/" + this.getRequestPath() : "/" + this.getRequestPath() + uploadPath;
        uploadfile(filesPath, listFile, set);
        return setResult(listFile, "controller1010");
    }


    
    public void uploadfile(String filePath, Map listFile, Set> set) throws Exception {
        for (Map.Entry each : set) {
            String fileName = each.getKey();
            MultipartFile file = each.getValue();
            //如果上传文件为空
            String uploadFile = file.getOriginalFilename();
            if (UtilTools.isEmpty(uploadFile)) {
                continue;
            }
            String newName = getFileName(uploadFile);
            if (UtilTools.isEmpty(newName)) {
                String originalFilename = file.getOriginalFilename();
                if ("file".equals(originalFilename)) {
                    originalFilename = ".png";
                }
                newName = DateUtil.getCurrentDateStr() + "_" + UtilTools.getUUID() + originalFilename;
            }

            listFile.put(fileName, getHostname() + getServiceName() + filePath + newName);
            //重命名上传文件
            IoUtil.uploadFile(file.getBytes(), filePath, newName);
        }
    }

    
    @RequestMapping(value = "/uploadBase64File", method = RequestMethod.POST)
    @IgnoreSpecialChar
    public Result uploadBase64File(String file) throws Exception {

        if (UtilTools.isEmpty(file)) {
            Map paramMap = getParamsMap();
            file = paramMap.get("file");
        }
        Map listFile = new LinkedHashMap<>();
        String strFilePath = "/" + this.getRequestPath() + "base64File/";
        Map map = new HashMap();
        if(file.indexOf(",")==-1){
            return setResult("请添加Base64前缀 data:image/png;base64,");
        }
        map.put("file", base64toMultipart(file));
        Set> set = map.entrySet();
        uploadfile(strFilePath, listFile, set);
        return setResult(listFile, "controller1010");
    }


    

    public MultipartFile base64toMultipart(String data) {
        try {
            data = data.replaceAll(" ", "+");
            String[] baseStrs = data.split(",");
            BASE64Decoder decoder = new BASE64Decoder();
            byte[] b = decoder.decodeBuffer(baseStrs[1]);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {
                    b[i] += 256;
                }
            }
            return new Base64MultipartFile(b, baseStrs[0], "file");
        } catch (IOException e) {
            throw new ResultException("controller1008");
        }
    }


}



public class BaseController extends BaseResult {

    private static final Logger log = LoggerFactory.getLogger(BaseController.class);

    
    public String getToken(String token){
        Map params = new HashMap<>();
        if (StringUtils.isBlank(token) ) {
            params = getParamsMap();
        }else{
            params.put("token",token);
        }
       return params.get("token");
    }


    
    public static Map getParamsMap() {
        Map paramsMap = new HashMap<>();
        try {
            ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = servletRequestAttributes.getRequest();
            String json = jsonRequest(request);
            if (StringUtils.isNotBlank(json)) {
                return JSONObject.parseObject(json, Map.class);
            }
        } catch (Exception e) {
            log.error("base1001", e.getMessage());
        }
        return paramsMap;
    }



    //自定义返回信息描述
    @Override
    public Result setResult(Object obj,String msg) {
        return setResult(obj==null?-1:1, msg,obj==null?new JSONObject():obj);
    }
    //验证失败,返回错误提示
    @Override
    public Result setResult(String msg) {
        return setResult(null,msg);
    }

    @Override
    public Result setResult(int code, String msg, Object obj) {
        return new Result(code,msg,obj);
    }

    @Override
    public Result setResult(Object obj){
        return setResult(obj,"base1002");
    }

}


public abstract class BaseResult {


    abstract Result setResult(Object obj);

    abstract Result setResult(Object obj,String msg);

    abstract Result setResult(String msg);

    abstract Result setResult(int code,String msg,Object obj);
}


public abstract class BaseService extends BaseResult {

       //请求成功,正常返回数据
       @Override
       public Result setResult(Object obj) {
              return setResult(obj,"base1002");
       }
       //自定义返回信息描述
       @Override
       public Result setResult(Object obj,String msg) {
              return setResult(obj==null?-1:1, msg, obj==null?new JSONObject():obj);
       }
       //验证失败,返回错误提示
       @Override
       public Result setResult(String msg) {
              return setResult(null,msg);
       }
       //实例化一个返回对象
       @Override
       public Result setResult(int code,String msg,Object obj) {
              return new Result(code,msg,obj);
       }

       public abstract Result checkVaild(Object obj);

       public Stream setResultMap(String key,Object value){
              return new Stream(new ConcurrentHashMap<>()).add(key,value);
       }

       public  Map setResultMap(){
              return setResultMap("result");
       }

       public  Map setResultMap(String key){
              return setMap(key,true);
       }

       public Map setMap(String key,Object value){
              Map resultMap = new ConcurrentHashMap<>();
              resultMap.put(key,value);
              return resultMap;
       }
       
       public static  Predicate distinctByKey(Function keyExtractor) {
              Map map = new ConcurrentHashMap<>();
              return t -> map.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
       }

}


public class UtilTools {

	public static final String ALL_CHAR = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	public static String getUUID(){
		return UUID.randomUUID().toString().replaceAll("-","");
	}


	
	public static String getRandom(int length,String strChar){
		if(strChar.length()==0){return "";}
		StringBuffer sb = new StringBuffer();
		Random random = new Random();
		for (int i = 0; i < length; i++) {
			sb.append(strChar.charAt(random.nextInt(strChar.length())));
		}
		return sb.toString();
	}
	public static String getRandomNumber(int length){
		return getRandom(length,ALL_CHAR.substring(0,10));
	}

	public static String getRandomChar(int length){
		return getRandom(length,ALL_CHAR);
	}


	
	public static String getRandom(){return getRandomNumber(6);}

	
	public static String fileSizeConver(int fileSize)
	{
		DecimalFormat df = new DecimalFormat("#");
		String fileSizeString = "";
		String wrongSize="0B";
		if(fileSize==0){
			return wrongSize;
		}
		if (fileSize < 1024){
			fileSizeString = df.format(fileSize) + "B";
		}
		else if (fileSize < 1048576){
			fileSizeString = df.format(fileSize / 1024) + "KB";
		}
		else if (fileSize < 1073741824){
			fileSizeString = df.format(fileSize / 1048576) + "MB";
		}
		else{
			fileSizeString = df.format(fileSize / 1073741824) + "GB";
		}
		return fileSizeString;
	}


    
    public static boolean isNumber(String str) {
        if (str != null && !"".equals(str)) {
            java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("[0-9]*");
            java.util.regex.Matcher match = pattern.matcher(str);
            return match.matches();
        } else {
            return false;
        }
    }

    
    public static boolean isEmpty(String val) {
        if (val == null || val.length() == 0 || "null".equalsIgnoreCase(val)) {
            return true;
        } else {
            return false;
        }
    }
   
	 
    public static String deCodeStr(String text) throws UnsupportedEncodingException{
		String str="";
		if(!isEmpty(text)){
			str= URLDecoder.decode(text,"UTF-8");
		}
		return str;
	}

	
	public static JSONObject getJsonObject(Object object){
		return JSON.parseObject(object.toString());
	}


	
	public static Map object2Map(Object obj) {
		Map map = new HashMap<>();
		if (obj == null) {
			return map;
		}
		Class clazz = obj.getClass();
		Field[] fields = clazz.getDeclaredFields();
		try {
			for (Field field : fields) {
				field.setAccessible(true);
				map.put(field.getName(), field.get(obj));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return map;
	}

    
    
    public static String supplementNum(String str,int num){
    	if(str.length()
    		str="0"+str;
    	}else{
    		return str;
    	}
    	return supplementNum(str,num);
    }
   
    
    
    
    public static Integer connectAD(String host,String post,String username,String password) {
        DirContext ctx=null;
        int isLogin = 0;
        Hashtable hashEnv = new Hashtable();
		hashEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); // LDAP访问安全级别(none,simple,strong)
		hashEnv.put(Context.SECURITY_PRINCIPAL, username!=null?username:""); //AD的用户名
		hashEnv.put(Context.SECURITY_CREDENTIALS, password!=null?password:""); //AD的密码
		hashEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); // LDAP工厂类
		hashEnv.put("com.sun.jndi.ldap.connect.timeout","3000");//连接超时设置为3秒
		hashEnv.put(Context.PROVIDER_URL," ldap://" + host + ":" + post);//默认端口389
        try {
        	if(password!=null&&!"".equals(password)){
	            ctx = new InitialDirContext(hashEnv);//初始化上下文
	            //System.out.println("身份验证成功!");
	            isLogin = 1;
        	}else{
        		//System.out.println("身份验证失败!");
        		isLogin = 0;//没有输入密码属于身份失败
        	}
            
        } catch (AuthenticationException e) {
            //System.out.println("身份验证失败!");
            e.printStackTrace();
            isLogin = 0;
        } catch (javax.naming.CommunicationException e) {
            //System.out.println("AD域连接失败!");
            e.printStackTrace();
            isLogin = -1;
        } catch (Exception e) {
            //System.out.println("身份验证未知异常!");
            e.printStackTrace();
            isLogin = -1;
        } finally{
            if(null!=ctx){
                try {
                    ctx.close();
                    ctx=null;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return isLogin;
    }




	
	public static String getIpAddr() {
		ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		HttpServletRequest request = requestAttributes.getRequest();
		String ipAddress = null;
		//ipAddress = this.getRequest().getRemoteAddr();
		ipAddress = request.getHeader("x-forwarded-for");
		if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
			ipAddress = request.getHeader("Proxy-Client-IP");
		}
		if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
			ipAddress = request.getHeader("WL-Proxy-Client-IP");
		}
		if(ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {
			ipAddress = request.getRemoteAddr();
			if("127.0.0.1".equals(ipAddress) || "0:0:0:0:0:0:0:1".equals(ipAddress)){
				//根据网卡取本机配置的IP
				InetAddress inet=null;
				try {
					inet = InetAddress.getLocalHost();
				} catch (UnknownHostException e) {
					e.printStackTrace();
				}
				ipAddress= inet.getHostAddress();
			}

		}

		//对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
		if(ipAddress!=null && ipAddress.length()>15){ //"***.***.***.***".length() = 15
			if(ipAddress.indexOf(",")>0){
				ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
			}
		}
		return ipAddress;
	}



	
	public static String toSBC(String input) {
		char [] c = input.toCharArray();
		for (int i = 0; i < c.length; i++) {
			if (c[i] == ' ') {
				c[i] = 'u3000';
			} else if (c[i] < '177') {
				c[i] = (char) (c[i] + 65248);
			}
		}
		return new String(c);
	}

	
	public static String toDBC(String input) {

		char [] c = input.toCharArray();
		for (int i = 0; i < c.length; i++) {
			if (c[i] == 'u3000') {
				c[i] = ' ';
			} else if (c[i] > 'uFF00' && c[i] < 'uFF5F') {
				c[i] = (char) (c[i] - 65248);
			}
		}
		return new String(c);
	}
}

import java.io.*;


public class IoUtil {


	
	public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
		File targetFile = new File(filePath);
		if(!targetFile.exists()){
			targetFile.mkdirs();
		}
		FileOutputStream out = new FileOutputStream(filePath+fileName);
		out.write(file);
		out.flush();
		out.close();
	}


	
	public static boolean  isUsefile(File file){
		if(!file.renameTo(file)){
			System.out.println("文件正在被使用中...");
			return true;
		}else{
			//允许操作
			return  false;
		}
	}



	
	public static ByteArrayOutputStream parseOut(InputStream in){
		ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
		try {
			int ch;
			while ((ch = in.read()) != -1) {
                swapStream.write(ch);
            }
		} catch (IOException e) {

		}
		return swapStream;
	}

	
	public static ByteArrayInputStream parseIn(byte[] buffer){
		return  new ByteArrayInputStream(buffer);
	}



	
	public static String getFileContent(String path) {
		String result="";
		try {
			FileReader fr = new FileReader(path);// 需要读取的文件路径
			BufferedReader br = new BufferedReader(fr);
			String str = br.readLine();
			result=str;
			while (str != null)// 如果当前行不为空
			{
				System.out.println(str);// 打印当前行
				str = br.readLine();// 读取下一行
				if(str!=null){
				  result+=str;
				}
			}
			br.close();// 关闭BufferReader流
			fr.close(); // 关闭文件流
		} catch (IOException e)// 捕捉异常
		{
			System.out.println("指定文件不存在");// 处理异常
		}
		return result;
	}
	

}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/933464.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号