当前位置: 首页 > news >正文

北京市建设资格与执业资格注册中心网站关于茶叶的网站模板

北京市建设资格与执业资格注册中心网站,关于茶叶的网站模板,只能家居网站建设目的,互联网情况下做企业网站的有点文件上传#xff0c;存储至本地目录中 一、代码1、工具类#xff08;敏感后缀过滤#xff09;2、文件上传#xff0c;存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类#xff08;敏感后缀过滤#x… 文件上传存储至本地目录中 一、代码1、工具类敏感后缀过滤2、文件上传存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类敏感后缀过滤 import org.apache.commons.lang3.StringUtils; import org.springframework.web.multipart.MultipartFile;import java.io.InputStream; import java.util.HashMap; import java.util.Iterator;/*** 校验上传文件敏感后缀*/ public class FileTypeFilter {/**文件后缀*/private static String[] forbidType {jsp,php};/**初始化文件头类型不够的自行补充*/final static HashMapString, String FILE_TYPE_MAP new HashMap();static {FILE_TYPE_MAP.put(3c25402070616765206c, jsp);FILE_TYPE_MAP.put(3c3f7068700a0a2f2a2a0a202a205048, php);/* fileTypeMap.put(ffd8ffe000104a464946, jpg);fileTypeMap.put(89504e470d0a1a0a0000, png);fileTypeMap.put(47494638396126026f01, gif);fileTypeMap.put(49492a00227105008037, tif);fileTypeMap.put(424d228c010000000000, bmp);fileTypeMap.put(424d8240090000000000, bmp);fileTypeMap.put(424d8e1b030000000000, bmp);fileTypeMap.put(41433130313500000000, dwg);fileTypeMap.put(3c21444f435459504520, html);fileTypeMap.put(3c21646f637479706520, htm);fileTypeMap.put(48544d4c207b0d0a0942, css);fileTypeMap.put(696b2e71623d696b2e71, js);fileTypeMap.put(7b5c727466315c616e73, rtf);fileTypeMap.put(38425053000100000000, psd);fileTypeMap.put(46726f6d3a203d3f6762, eml);fileTypeMap.put(d0cf11e0a1b11ae10000, doc);fileTypeMap.put(5374616E64617264204A, mdb);fileTypeMap.put(252150532D41646F6265, ps);fileTypeMap.put(255044462d312e350d0a, pdf);fileTypeMap.put(2e524d46000000120001, rmvb);fileTypeMap.put(464c5601050000000900, flv);fileTypeMap.put(00000020667479706d70, mp4);fileTypeMap.put(49443303000000002176, mp3);fileTypeMap.put(000001ba210001000180, mpg);fileTypeMap.put(3026b2758e66cf11a6d9, wmv);fileTypeMap.put(52494646e27807005741, wav);fileTypeMap.put(52494646d07d60074156, avi);fileTypeMap.put(4d546864000000060001, mid);fileTypeMap.put(504b0304140000000800, zip);fileTypeMap.put(526172211a0700cf9073, rar);fileTypeMap.put(235468697320636f6e66, ini);fileTypeMap.put(504b03040a0000000000, jar);fileTypeMap.put(4d5a9000030000000400, exe);fileTypeMap.put(3c25402070616765206c, jsp);fileTypeMap.put(4d616e69666573742d56, mf);fileTypeMap.put(3c3f786d6c2076657273, xml);fileTypeMap.put(494e5345525420494e54, sql);fileTypeMap.put(7061636b616765207765, java);fileTypeMap.put(406563686f206f66660d, bat);fileTypeMap.put(1f8b0800000000000000, gz);fileTypeMap.put(6c6f67346a2e726f6f74, properties);fileTypeMap.put(cafebabe0000002e0041, class);fileTypeMap.put(49545346030000006000, chm);fileTypeMap.put(04000000010000001300, mxp);fileTypeMap.put(504b0304140006000800, docx);fileTypeMap.put(6431303a637265617465, torrent);fileTypeMap.put(6D6F6F76, mov);fileTypeMap.put(FF575043, wpd);fileTypeMap.put(CFAD12FEC5FD746F, dbx);fileTypeMap.put(2142444E, pst);fileTypeMap.put(AC9EBD8F, qdf);fileTypeMap.put(E3828596, pwl);fileTypeMap.put(2E7261FD, ram);*/}/*** param fileName* return String* description 通过文件后缀名获取文件类型*/private static String getFileTypeBySuffix(String fileName) {return fileName.substring(fileName.lastIndexOf(.) 1, fileName.length());}/*** 文件类型过滤** param file*/public static void fileTypeFilter(MultipartFile file) throws Exception {String suffix getFileType(file);for (String type : forbidType) {if (type.contains(suffix)) {throw new Exception(上传失败非法文件类型 suffix);}}}/*** 通过读取文件头部获得文件类型** param file* return 文件类型* throws Exception*/private static String getFileType(MultipartFile file) throws Exception {String fileExtendName null;InputStream is;try {//is new FileInputStream(file);is file.getInputStream();byte[] b new byte[10];is.read(b, 0, b.length);String fileTypeHex String.valueOf(bytesToHexString(b));IteratorString keyIter FILE_TYPE_MAP.keySet().iterator();while (keyIter.hasNext()) {String key keyIter.next();// 验证前5个字符比较if (key.toLowerCase().startsWith(fileTypeHex.toLowerCase().substring(0, 5))|| fileTypeHex.toLowerCase().substring(0, 5).startsWith(key.toLowerCase())) {fileExtendName FILE_TYPE_MAP.get(key);break;}}// 如果不是上述类型则判断扩展名if (StringUtils.isBlank(fileExtendName)) {String fileName file.getOriginalFilename();return getFileTypeBySuffix(fileName);}is.close();return fileExtendName;} catch (Exception exception) {throw new Exception(exception.getMessage(), exception);}}/*** 获得文件头部字符串** param src* return*/private static String bytesToHexString(byte[] src) {StringBuilder stringBuilder new StringBuilder();if (src null || src.length 0) {return null;}for (int i 0; i src.length; i) {int v src[i] 0xFF;String hv Integer.toHexString(v);if (hv.length() 2) {stringBuilder.append(0);}stringBuilder.append(hv);}return stringBuilder.toString();} }2、文件上传存储至本地 import lombok.extern.slf4j.Slf4j; import org.apache.tomcat.util.buf.HexUtils;import org.springframework.transaction.annotation.Transactional; import org.springframework.util.FileCopyUtils; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartHttpServletRequest;import javax.servlet.http.HttpServletRequest; import java.io.*; import java.security.MessageDigest; import java.text.SimpleDateFormat; import java.util.Date;Slf4j RestController RequestMapping(/file) public class FileUploadController {private static String FILE_NAME_REGEX [^A-Za-z\\.\\(\\)\\-\\_0-9\\u4e00-\\u9fa5];/*** 文件上传统一方法*/TransactionalPostMapping(value /upload)public String upload(HttpServletRequest request) {MultipartHttpServletRequest multipartRequest (MultipartHttpServletRequest) request;// 获取上传文件对象MultipartFile file multipartRequest.getFile(file);if (file null) {throw new NullPointerException(请选择文件上传);}// todo 文件名称从流里面取String fileName file.getOriginalFilename();try {// 过滤上传文件类型FileTypeFilter.fileTypeFilter(file);// todo 计算哈希值校验是否重复上传大文件请关闭MessageDigest md5 MessageDigest.getInstance(MD5);byte[] digest md5.digest(file.getBytes());String fileMd5 HexUtils.toHexString(digest);if (fileMd5.equals(xxxxxxxx)) {// ......}// 获取文件后缀int begin fileName.lastIndexOf(.);String fileSuffix fileName.substring(begin 1);log.info(文件名称{}, fileName);log.info(文件大小{}, file.getBytes().length);log.info(文件类型{}, file.getContentType());log.info(文件md5 算法{}, fileMd5);log.info(文件后缀{}, fileSuffix);// todo 文件存储 主路径String filePath /opt/test;// todo 进行存储File upFile uploadLocal(file, filePath);if (upFile null) {return 上传存储失败;}String savePath upFile.getPath().replace(\\, /);log.info(【存储】文件目录{}, upFile.getName());log.info(【存储】文件路径{}, savePath);return 成功;} catch (Exception e) {return 失败;}}/*** 本地文件上传** param mf 文件* param bizPath 自定义路径* return 文件流*/private File uploadLocal(MultipartFile mf, String bizPath) {String toDay new SimpleDateFormat(yyyy-MM-dd).format(new Date());try {String ctxPath ;String fileName;String fileDir ctxPath File.separator bizPath File.separator toDay;File file new File(fileDir);if (!file.exists()) {// 创建文件根目录file.mkdirs();}log.info(上传目录{}, file.getPath());// 获取文件名String orgName mf.getOriginalFilename();if (!StringUtils.hasText(orgName)) {throw new NullPointerException(请选择文件上传);}orgName getFileName(orgName);if (orgName.contains(.)) {fileName orgName.substring(0, orgName.lastIndexOf(.)) _ System.currentTimeMillis() orgName.substring(orgName.lastIndexOf(.));} else {fileName orgName _ System.currentTimeMillis();}String savePath file.getPath() File.separator fileName;File saveFile new File(savePath);FileCopyUtils.copy(mf.getBytes(), saveFile);return saveFile;} catch (IOException e) {log.error(e.getMessage(), e);}return null;}/*** 判断文件名是否带盘符重新处理** param fileName* return*/public static String getFileName(String fileName) {//判断是否带有盘符信息int unixSep fileName.lastIndexOf(/);// Check for Windows-style pathint winSep fileName.lastIndexOf(\\);// Cut off at latest possible pointint pos (winSep unixSep ? winSep : unixSep);if (pos ! -1) {// Any sort of path separator found...fileName fileName.substring(pos 1);}//替换上传文件名字的特殊字符fileName fileName.replace(, ).replace(,, ).replace(, ).replace(#, ).replace(“, ).replace(”, );//替换上传文件名字中的空格fileName fileName.replaceAll(\\s, );fileName fileName.replaceAll(FILE_NAME_REGEX, );return fileName;}} 3、文件下载 import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse; import java.io.*; import java.net.URLEncoder;Slf4j RestController RequestMapping(/file) public class FileDownloadController {GetMapping(value /download)public void download(String loadType, HttpServletResponse response) {// 文件路径String filePath /opt/test/xxxx-xx-xx;// 文件名称String fileName 1 - 副本.JPG;// 文件类型String contentType image/png;// 文件大小Integer fileSize 17408;fileLoad(response, filePath, fileName, contentType, fileSize, loadType);}public void fileLoad(HttpServletResponse response, String filePath, String fileName, String contentType, Integer fileSize, String loadType) {File file new File(filePath);if (!file.exists()) {response.setStatus(404);throw new RuntimeException(文件[ fileName ]不存在..);}InputStream inputStream null;OutputStream outputStream null;// 其余处理略try {inputStream new BufferedInputStream(new FileInputStream(filePath));log.info(下载文件,{}大小{}.kb, fileName, fileSize / 1024);// 设置强制下载不打开response.setContentType(contentType);String dis 1.equals(loadType) ? attachment : inline;response.addHeader(Content-Disposition, dis ;fileName URLEncoder.encode(fileName, UTF-8));response.addHeader(content-length, String.valueOf(fileSize));outputStream response.getOutputStream();byte[] buf new byte[1024];int len;while ((len inputStream.read(buf)) 0) {outputStream.write(buf, 0, len);}response.flushBuffer();} catch (IOException e) {log.error(读取文件失败 e.getMessage());response.setStatus(404);e.printStackTrace();} finally {if (inputStream ! null) {try {inputStream.close();} catch (IOException e) {log.error(e.getMessage(), e);}}if (outputStream ! null) {try {outputStream.close();} catch (IOException e) {log.error(e.getMessage(), e);}}}}} 二、效果演示 1、上传 1.1、postMan 请求 1.2、上传效果 2、下载 2.1、下载效果
http://www.lakalapos1.cn/news/32914/

相关文章:

  • 茂名模板建站定制网站如何整理网站
  • 怎么做网站数据库备份wordpress 访客 用户
  • 阿里巴巴网站建设教程wordpress如何修改登录地址
  • 网站开发ios深圳网站开发多少钱
  • 淘宝里面的网站怎么做的室内平面设计软件
  • 长春建设网站公司2017做淘宝客网站还有吗
  • 网站推广营销公司关于加强机关网站建设
  • 江西省建设网站公司洛阳建设工程信息网
  • 网站搭建php源码总工会网站建设方案
  • 网站建设yingkagou好用的h5网站
  • 自己做电影网站犯法吗建行手机app下载安装
  • 网站建设课程设计报告总结怎么破解网站后台
  • 网站建设意义和作用百度网站建设制作公司
  • 建设项目咨询公司网站武侯区旅游网站建设
  • 网站建设与管理指什么软件phpcms做双语网站
  • 建筑工程 技术支持 东莞网站建设橙色企业网站模板
  • 国内设计网站排名wordpress 解析漏洞
  • 不用源码做网站怎样找别人制作网站
  • 宝塔做两个网站数据库支持的网站怎么做
  • 网站建设的发展历程上海好牛网站建设
  • 网站设计_网站建设_手机网站建设搜狗提交入口网址
  • 阿里云服务器建设网站选择那个镜像南京企业建网站流程
  • 网站优化软件wordpress get_attached_media
  • 网站加密传输怎么做淘宝网站页面设计
  • 陕西响应式网站建设公司东莞横沥新闻今天
  • 建设项目自主验收公示网站免费的域名注册网站
  • 网站设计步骤ppt虚拟房间设计app
  • 漳平网络建站公司网站到期如何续费
  • 如何写网站优化方案郑州高端设计工作室
  • 旅游网站建设问题Wordpress禁止访问仪表盘