后台上传方法
@RequestMapping (value = "/api_upload", method = requestMethod.post) public @RespondeBody String Upload (httpServletRequest -Anforderung, httpServletResponse -Antwort) {// 获取上传路径 String UploadFilePath = ParameterConstants.UPLOAD_FILE_PATH; String StorePath = ""; MultiparthttpServletRequest multipArtrequest = (multiparthttpServletRequest) Anfrage; // 获取前台传值 String [] ordner = multipArtrequest.getParameterValues ("Pfad"); String order = ""; if (ordner! = null) {ordner = ordner [0]; StorePath+= Ordner+"/"; } Map <String, MultiPartFile> fileMap = multipArtrequest.getFilemap (); SimpleDateFormat SDF = new SimpledateFormat ("yyyymm"); String ymd = sdf.format (neues Datum ()); StorePath + = ymd + "/"; // 创建文件夹 Datei Datei = neue Datei (UploadFilePath+StorePath); if (! file.exists ()) {file.mkdirs (); } String Dateiname = null; String path = null; für (map.entry <String, MultiPartFile> Entity: fileMap.EntrySet ()) {// 上传文件名 MultiPartFile mf = entity.getValue (); fileName = mf.getoriginalFileName (); String uUid = uUid.randomuuid (). ToString (). Ersetzen ("// -", ""); // 返回一个随机 uUid。 String -Suffix = Dateiname.indexof (".")! = -1? fileName.substring (Dateiname.lastIndexof ("."), Dateiname.length ()): null; String newFileName = uUid + (Suffix! = NULL? Suffix: ""); // 构成新文件名。 Datei uploadFile = neue Datei (UploadFilePath + StorePath + Newfilename); try { / ** * 验证上传文件的合法性 * / commonsMultipartFile cmf = (commonsMultipartFile) mf; boolean isvalid = checkoutFiletype.getUpFilelegitimacyFlag (cmf.getFileItem (), ". Jpg.gif.png.jpeg"); if (! isvalid) {System.out.println ("上传图片不合法"); null zurückkehren; } FilecopyUtils.copy (mf.getBytes (), UploadFile); StorePath = StorePath + Newfilename; } catch (ioException e) {e.printstacktrace (); }} return StorePath; }文件合法性验证类
Paket com.kaiyuan.common.util; import Java.io.FileInputStream; importieren java.io.ioException; importieren java.io.inputstream; import Java.util.hashMap; import Java.util.map; import org.apache.commons.FileUpload.FileItem; / ** * @Description: 处理上传附件, 校验是否合法 在服务器端判断文件类型的问题 , 故用获取文件头的方式 , , * 直接读取文件的前几个字节 , 来判断上传文件是否符合格式 */ public class checkoutFileType {// 记录各个文件头信息及对应的文件类型 public static map <String, String> mfiletypes = new HashMap <String, String> (); // 所有合法的文件后缀 public static String res_filetype = ".jpg.gif.png.jpeg"; static {// Bilder 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 ("0d0a0d0aa", ".Txt"); mfiletypes.put ("0d0a2d2d", ".txt"); // txt mFiletypes.put ("0d0ab4b4", ".txt"); // txt mFiletypes.put ("B4B4BDA8", ".txtypen"); ".txt"); // txt, 文件头部为英文字母 mfiletypes.put ("32323232", ".txt"); // txt, 文件头部内容为数字 mfiletypes.put ("0d0a09b4", ".txt"); // Txt, 文件头部内容为数字 Mfiletypes.PUnt ("31330d", ".注意由于文本文档录入内容过多 , 则读取文件头时较为多变 -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"); // Zugriff 数据库文件 mfiletypes.put ("46726f6d", ".mht"); Mfiletypes.put ("4D494D45", ".MHTML"); } / ** * 根据文件的输入流获取文件头信息 * * @param filepath * 文件路径 * @return 文件头信息 * / public static String getFileType (InputStream) {byte [] b = new byte [4]; if (ist! = 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); Rückgabewert; } / ** * 将要读取文件头信息的文件的 Byte 数组转换成 String 类型表示 下面这段代码就是用来对文件类型作验证的方法 , , * 将字节数组的前四位转换成 16 进制字符串 , , 要先和 0xff 做一次与运算。 * 这是因为 整个文件流的字节数组中 整个文件流的字节数组中 , 有很多是负数 , , 可以将前面的符号位都去掉 , 这样转换成的 16 进制字符串最多保留两位 进制字符串最多保留两位 如果是正数又小于 10 , 那么转换后只有一位 , 需要在前面补 , , 取完前四位这个循环就可以终止了 取完前四位这个循环就可以终止了 取完前四位这个循环就可以终止了 取完前四位这个循环就可以终止了 * @param src 要读取文件头信息的文件的 byte @ * @param src 要读取文件头信息的文件的 byte @ @ @ * @param src 要读取文件头信息的文件的 byte @ @ @ * @param src 要读取文件头信息的文件的 byte @ @ @| bytestohexstring (byte [] src) {stringBuilder builder = new StringBuilder (); if (src == null || src.length <= 0) {return null; } String hv; für (int i = 0; i <src.length; i ++) {// 以十六进制(基数 16 )无符号整数形式返回一个整数参数的字符串表示形式 , 并转换为大写 Hv = Integer. if (hv.length () <2) {builder.Append (0); } builder.append (hv); } System.out.println ("获取文件头信息:" + builder.toString ()); return Builder.toString (); }/ ** * 判断上传的文件是否合法 : : 检查文件的扩展名 , (二)、 第二 : 检查文件的 mime 类型。。 * * @param beiattel * @return boolean */ public static boolean getupFilelegitimacyFlag (FileItem ATTATEDOC, STRING ABTEL) {booan adatn; ATTEMDOC.GETNAME (); Sname.TolowerCase (); oder第三步 : : 检查文件扩展名 , 是否符合要求范围 **/ if (req_filetype! = Null &&! ". } 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öst eine Ausnahme aus {// endgültige String-Filetype = getFiletype ("d: /bicp-huawei.mht"); FileInputStream ist = null; String value = null; String filepath = "e: /aa/c.txt"; try {is = new FileInputStream (filepath); Byte [] B = neues Byte [4]; is.read (b, 0, B.Length); value = byestohexstring (b); } catch (Ausnahme e) {} endlich {if (null! = is) {try {is.close (); } catch (ioException e) {}}} system.out.println (value); }}前端上传 js
$ (document) .Ready (function () {new textMagnifier ({InputElem: '#BankCardno', Align: 'Top', SplittryPe: [4,4,4,5,5], Delimiter: ''}); 'swf': '$ {pageContext.request.contextPath} /js/upload/uploadify.swf', 'Uploader': getBasepath ()+'/Upload/api_Upload; '$ {pageContext.request.contextPath} /js/upload/Uploadify-cancel.png', 'Buttontext': '上传', 'auto': true, 'multi': true, 'uploadLimit': 100, 'entfernt '*.jpg;*. gif;*. png;*. jpeg;', 'fileSizElimit': '2mb', 'fileTypedesc': '上传', 'Onuploadsuccess': Funktion (Datei, Daten, Daten, Antwort) {if (data! var uploadSize = uploadFiles.Length; isUploadSuccess = true; }, 'OnuploadError': Funktion (Datei, Fehlercode, Errormsg, Fehlersteuer) {if (fehlerstring.indexof ('Die Upload -Grenze wurde erreicht')) {layer.msg (fehlerstring); }}, 'Onselect': function (Datei) {// alert ('Die Datei' + Datei.name + 'wurde zur Warteschlange hinzugefügt.'); isUploadSuccess = false; }, 'OnseleCterror': Funktion (Datei, Fehlercode, Errormsg) {Switch (ERRORCODE) {CASE -110: LAGE.MSG ("文件大小超过了 2M"); brechen; Fall -100: Layer.MSG ("最多上传 5 张图片"); brechen; Standard: Layer.msg (Errormsg); }}, 'OnDialogClose': function (queuedata) {var uploadFiles = $ ("#Tickets"). Val (). Split (','); var uploadFileSize = uploadFiles.length; if (UploadFileSize> 5) {Layer.msg ("最多上传 5 张图片"); Queuedata.FilessElted = 0 return false; }}}); OnQuery (); });以上所述是小编给大家介绍的 Uploadify 上传及后台文件合法性验证的代码解析 , 希望对大家有所帮助 , 如果大家有任何疑问请给我留言 , 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持! 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!