后台上传方法
@RequestMapping (value = "/ api_upload", méthode = requestMethod.post) public @ResponseBody String upload (httpservletRequest request, httpservletResponse réponse) {// 获取上传路径 String uploadFilePath = ParameterConstants.upload_file_path; String store storePath = ""; MultipartHTTPServLetRequest MultipartReQuest = (multipartHTTPServleRequest); // 获取前台传值 String [] dossiers = multiparTreQuest.getParameTervalues ("path"); Folder de chaîne = ""; if (dossiers! = null) {dossier = dossiers [0]; storePath + = dossier + "/"; } Map <string, multipartFile> fileMap = multipartReQuest.getFileMap (); SimpledateFormat sdf = new SimpledateFormat ("yyyymm"); String ymd = sdf.format (new Date ()); storePath + = ymd + "/"; // 创建文件夹 fichier fichier = nouveau fichier (uploadFilePath + StorePath); if (! file.exists ()) {file.mkDirs (); } String filename = null; String path = null; pour (map.entry <string, multipartFile> entité: fileMap.EntrySet ()) {// 上传文件名 multipartfile mf = entity.getValue (); filename = mf.getoriginalFileName (); String UUID = uUid.randomuuid (). ToString (). RempaceALL ("// -", ""); // 返回一个随机 uuid。 String suffix = filename.indexof (".")! = -1? filename.substring (filename.LastIndexof ("."), filename.length ()): null; String newFileName = UUID + (suffixe! = Null? Suffix: ""); // 构成新文件名。 file uploadFile = new File (uploadFilePath + StorePath + newFileName); Essayez {/ ** * 验证上传文件的合法性 * / commonsMultiPartFile cmf = (commonsMultiPartFile) mf; booléen isvalid = checkoutfileType.getUpFilelegitimacyFlag (cmf.getFileItem (), ". jpg.gif.png.jpeg"); if (! isValid) {System.out.println ("上传图片不合法"); retourner null; } FileCopyUtils.copy (mf.getBytes (), uploadFile); storePath = storePath + newFileName; } catch (ioException e) {e.printStackTrace (); }} return StorePath; }文件合法性验证类
Package com.kaiyuan.common.util; import java.io.fileInputStream; Importer java.io.ioException; import java.io.inputStream; import java.util.hashmap; importation java.util.map; import org.apache.commons.fileupload.fileItem; / ** * @Description: 处理上传附件, 校验是否合法 在服务器端判断文件类型的问题 , 故用获取文件头的方式 , * 直接读取文件的前几个字节 , 来判断上传文件是否符合格式 * / classe publique CheckoutFileType {// 记录各个文件头信息及对应的文件类型 Public Static Map <String, String> mFileTypes = new Hashmap <String, String> (); // 所有合法的文件后缀 Public Static String res_filetype = ".jpg.gif.png.jpeg"; statique {// images mFileTypes.put ("ffd8ffe0", ".jpg"); mFileTypes.put ("89504e47", ".png"); mFileTypes.put ("47494638", ".gif"); mFileTypes.put ("49492a00", ".tif"); mFileTypes.put ("424d", ".bmp"); // ps 和 cad mFileTypes.put ("38425053", ".psd"); mFileTypes.put ("41433130", ".dwg"); // cad mFileTypes.put ("252150532d41646f6265", ".ps"); // 办公文档类 mFileTypes.put ("d0cf11e0", ".doc"); // ppt 、 doc 、 xls mFileTypes.put ("504b0304", ".docx"); // pptx 、 docx 、 xlsx / ** 注意由于文本文档录入内容过多 , 则读取文件头时较为多变 -start ** / mFileTypes.put ("0d0a0d0a", ".txt"); // txt " mFileTypes.put ("0d0a2d2d", ".txt"); // txt mFileTypes.put ("0d0ab4b4", ".txt"); // txt mFileTypes.put ("b4b4bda8", ".txt"); // 文件头部为汉字 mFileTypes.put ("73666673", ".txt"); // txt, 文件头部为英文字母 mFileTypes.put ("32323232", ".txt"); // txt, 文件头部内容为数字 mFileTypes.put ("0d0a09b4", ".txt"); // txt, 文件头部内容为数字 mFileTypes.put ("3132330D", ".txt");注意由于文本文档录入内容过多 , 则读取文件头时较为多变 -end ** / mFileTypes.put ("7b5c727466", ".rtf"); // 日记本 mFileTypes.put ("255044462d312e", ".pdf"); // 视频或音频类 mFileTypes.put ("3026b275", ".wma"); mFileTypes.put ("57415645", ".wav"); mFileTypes.put ("41564920", ".avi"); mFileTypes.put ("4d546864", ".mid"); mFileTypes.put ("2e524d46", ".rm"); mFileTypes.put ("000001ba", ".mpg"); mFileTypes.put ("000001b3", ".mpg"); mFileTypes.put ("6d6f6f76", ".mov"); mFileTypes.put ("3026b2758e66cf11", ".asf"); // 压缩包 mFileTypes.put ("52617221", ".rar"); mFileTypes.put ("1f8b08", ".gz"); // 程序文件 mFileTypes.put ("3c3f786d6c", ".xml"); mFileTypes.put ("68746d6c3e", ".html"); mFileTypes.put ("7061636b", ".java"); mFileTypes.put ("3C254020", ".jsp"); mFileTypes.put ("4d5a9000", ".exe"); mFileTypes.put ("44656c69766572792d646174653a", ".eml"); // 邮件 mFileTypes.put ("5374616e64617264204a", ".mdb"); // Access 数据库文件 mFileTypes.put ("46726f6d", ".mht"); mFileTypes.put ("4d494d45", ".mhtml"); } / ** * 根据文件的输入流获取文件头信息 * * @param filepath * 文件路径 * @return 文件头信息 * / public static static getFileType (inputStream is) {byte [] b = new byte [4]; if (is! = null) {try {is.read (b, 0, b.length); } catch (ioException e) {e.printStackTrace (); }} return mFileTypes.get (getFileHeader (b)); } / ** * 根据文件转换成的字节数组获取文件头信息 * * @param filepath * 文件路径 * @return 文件头信息 * / public static String getFileHeader (byte [] b) {string value = byTestoHExString (b); valeur de retour; } / ** * 将要读取文件头信息的文件的 octet 数组转换成 String 类型表示 下面这段代码就是用来对文件类型作验证的方法 , * 将字节数组的前四位转换成 16 进制字符串 , 并且转换的时候 , 要先和 0xff 做一次与运算。 * 这是因为 , 整个文件流的字节数组中 , 有很多是负数 , , 进行了与运算后 可以将前面的符号位都去掉 可以将前面的符号位都去掉 , * 这样转换成的 16 进制字符串最多保留两位 , 如果是正数又小于 如果是正数又小于 , 那么转换后只有一位 , * 需要在前面补 0 , 这样做的目的是方便比较 这样做的目的是方便比较 , 取完前四位这个循环就可以终止了 * * @param src 要读取文件头信息的文件的 byte 数组 * @rernr 文件头信息byTestoHExString (byte [] src) {StringBuilder builder = new StringBuilder (); if (src == null || src.length <= 0) {return null; } String hv; for (int i = 0; i <src.length; i ++) {// 以十六进制 (基数 16) 无符号整数形式返回一个整数参数的字符串表示形式 , 并转换为大写 hv = Integer.tohexString (src [i] & 0xff) .toupperase (); if (hv.length () <2) {builder.append (0); } builder.append (hv); } System.out.println ("获取文件头信息:" + builder.toString ()); retour builder.toString (); } / ** * 判断上传的文件是否合法 (一) 、第一 : 检查文件的扩展名 , (二) 、 、 : : 检查文件的 MIME 类型。 * * @param attachdoc * @return booléen * / public static boolean getUpFileleleanflag = fally; {String attachname = jointdoc.getName (); Sname.TolowerCase (); {req_filetype = getFileType (attachdoc.getInputStream (); ** / if (req_filetype! = null &&! "". equals (req_fileType) &&! "null" .equals (req_filetype)) {/ ** 第四步 : 校验上传的文件扩展名 , 是否在其规定范围内 ** / if (allowtype.indexof (req_filetyty)! = -1) {upflag = true; } else {upflag = false; }} else {/ ** 特殊情况校验, 如果用户上传的扩展名为, 文本文件, 则允许上传 -start ** / if (sname.indexof (". txt")! = -1) {upflag = true; } else {upflag = false; } / ** 特殊情况校验, 如果用户上传的扩展名为, 文本文件, 则允许上传 -end ** /}}}} return upflag; } / ** * 主函数 , 测试用 * * @param args * @throws exception * / public static void main (String [] args) lève une exception {// fileType final filetype = getFileType ("d: /bicp huwei.mht"); FileInputStream est = null; String Value = NULL; String filepath = "e: /aa/c.txt"; try {is = new FileInputStream (filePath); octet [] b = nouveau octet [4]; is.read (b, 0, b.length); valeur = byTestoHExString (b); } catch (exception e) {} enfin {if (null! = is) {try {is.close (); } catch (ioException e) {}}} System.out.println (valeur); }}前端上传 JS
$ (document) .ready (function () {new TextMagNifier ({inputElem: '#bankCardno', align: 'top', SplitType: [4,4,4,5,5], Delimiter: ''}); $ ('# file_upload'). Uploadify ({FormData ': {' path ':' / uploadfilfila : '$ {pagecontext.request.contextPath} /js/upload/uploadify.swf', 'uploader': getBasepath () + '/ upload / api_upload; jSessionId = $ {pageContext.session.id}', 'cancelimg': '$ {pagecontext.request.contextpath} /js/upload/uploadify-cancel.png', 'ButtonText': '上传', 'Auto': true, 'multi': true, 'uploadlimit': 100, 'recouledacleted': true, 'filetypeents': '* .jpg; *. gif; *. 'FileSizelimit': '2mb', 'FileTypeDesc': '上传', 'onuploadsuccess': function (fichier, data, réponse) {if (data! = null && data.length> 0) {var uploadFiles = $ ("# billets"). couchers.msg ("最多上传 5 张图片"); }, 'onuploadError': function (file, errorcode, errormsg, errorString) {if (errorString.indexof ('La limite de téléchargement a été atteinte')) {couche.msg (errerstring); }}, 'onSelect': function (file) {// alert ('le fichier' + file.name + 'a été ajouté à la file d'attente.'); ISUPloadSuccess = false; }, 'onselecterror': function (file, errorcode, errormsg) {switch (errorcode) {case -110: couche.msg ("文件大小超过了 2m"); casser; cas -100: couche.msg ("最多上传 5 张图片"); casser; par défaut: couche.msg (errormsg); }}, 'ondialogClose': function (queueData) {var uploadFiles = $ ("# billets"). Val (). Split (','); var uploadFileSize = uploadFiles.length; if (uploadFileSize> 5) {couche.msg ("最多上传 5 张图片"); queueData.FileSelected = 0 return false; }}}); onQuery (); });以上所述是小编给大家介绍的 Téléchargement 上传及后台文件合法性验证的代码解析 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!