上传解析文件流-基于FTP上传工具类

话不多说上代码

1.引入的包

import org.apache.tomcat.util.http.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.*;

2.注入FTP上传工具类

参考我的上一篇FTP工具类文章

@Resource
    private FTPUtil fTPUtil;

3.内容主体

dirs ----->文件目录名称
fTPUtil.uploadFile,参考我的上一篇FTP工具类文章

 public FileVo SavepointManagerVideo(HttpServletRequest request, String dirs) {
    
    
        HashMap<String, String> extMap = new HashMap<String, String>();
        extMap.put("video", "mp4,f4a,qsv,avi");//用于判断文件后缀
        FileVo vo = new FileVo();
        // 最大文件大小
        long maxSize = 157286400;
        if (!ServletFileUpload.isMultipartContent(request)) {
    
    
            vo.setMsg("请选择文件!");
            vo.setCode(1);
            return vo;
        }
        //判断上传文件夹的目录名称
        String dirName = request.getParameter("dirs");
        if (!extMap.containsKey(dirName)) {
    
    
            vo.setMsg("目录名不正确!");
            vo.setCode(1);
            return vo;
        }
        MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request;
        Map<String, MultipartFile> fileMap = mRequest.getFileMap();
        String fileName = null;
        try {
    
    
            ArrayList<String> UrlList= new ArrayList<>();//接受上传成功后的地址
            for (Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); it.hasNext(); ) {
    
    
                Map.Entry<String, MultipartFile> entry = it.next();
                MultipartFile mFile = entry.getValue();
                fileName = mFile.getOriginalFilename();
                // 检查文件大小
                if (mFile.getSize() > maxSize) {
    
    
                    vo.setMsg("上传文件大小超过限制!");
                    vo.setCode(1);
                    return vo;
                    // return "上传文件大小超过限制!";
                }
                String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1);
                if (!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)) {
    
    
                    // return "上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName)
                    // + "格式!";
                    vo.setMsg("文件格式不正确");
                    vo.setCode(1);
                    return vo;
                }
                // 上传文件名   WpDate.getNo(2)是我一个工具类的方法,生成随机文件名称
                String newName = WpDate.getNo(2) + "." + fileExt;
                // 上传的路径
                String imagePath = dirs + "/" + WpDate.dateToStrShort(new Date());
                String saveUrl = fTPUtil.uploadFile(imagePath, newName, mFile.getInputStream());
                System.out.println(saveUrl);
                UrlList.add(saveUrl);
            }
            vo.setCode(0);
            vo.setMsg("上传成功");
            Map<String, Object> map = new HashMap<>();
            map.put("src", UrlList);
            vo.setData(map);
            return vo;
        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
        return vo;
    }

4. 生成随机数文件夹,自己写也可以

WpDate.getNo(2)

/**
	 * 保证一次产生10000个随机数内无重复 平均一秒钟能产生250个随机数
	 */
	private static List<String> randList = new ArrayList<String>();

	/**
	 * 产生随机数,一般可用作表单主键ID
	 * 
	 * @param k
	 * @return
	 */
	public static String getNo(int k) {
    
    
		if (randList.size() > 10000) {
    
    
			randList.clear();
		}
		String rno = getNoNo(k);
		while (randList.contains(rno)) {
    
    
			rno = getNoNo(k);
		}
		randList.add(rno);
		return rno;
	}

5. 返回实体类

FileVo

	private String msg;// 错误信息

	private Integer code;// 状态码 0 成功 1 失败

	private Map<String,Object> data;

6.总结

Map.entrySet() :遍历MAP所有key
iterator.hasNext(): 判断key是否存在,返回boolean类型
iterator.next():指针向下移动,并返回对应元素,如没有则抛异常
iterator.remove():删除当前指针对应的元素,如没有则抛异常

猜你喜欢

转载自blog.csdn.net/qq_35885175/article/details/114399285