后台上传方法
@RequestMapping (value = "/api_upload", method = requestMethod.post) สาธารณะ @ResponseBody การอัปโหลด (คำขอ httpservletRequest, การตอบกลับ httpservletResponse) {// 获取上传路径สตริง uploadFilePath = parameterConstants.upload_file_path; String StorePath = ""; multiparthttpservletRequest multipartrequest = (multiparthttpservletRequest) คำขอ; // 获取前台传值 string [] โฟลเดอร์ = Multipartrequest.getParametervalues ("Path"); โฟลเดอร์สตริง = ""; if (โฟลเดอร์! = null) {โฟลเดอร์ = โฟลเดอร์ [0]; StorePath+= โฟลเดอร์+"/"; } แผนที่ <string, multipartFile> fileMap = multipartrequest.getFileMap (); SimpledateFormat SDF = ใหม่ SimpleDateFormat ("Yyyymm"); สตริง ymd = sdf.format (วันที่ใหม่ ()); StorePath + = ymd + "/"; // 创建文件夹ไฟล์ไฟล์ = ไฟล์ใหม่ (UploadFilePath+StorePath); if (! file.exists ()) {file.mkdirs (); } string filename = null; เส้นทางสตริง = null; สำหรับ (map.entry <string, multipartfile> เอนทิตี: filemap.entryset ()) {// 上传文件名 multipartfile mf = entity.getValue (); filename = mf.getoriginalfilename (); string uuid = uuid.randomuuid (). toString (). replaceall ("// -", ""); // 返回一个随机 uuid 。สตริงคำต่อท้าย = filename.indexof (".")! = -1? filename.substring (filename.lastindexof ("."), filename.length ()): null; สตริง newfileName = uuid + (คำต่อท้าย! = null? คำต่อท้าย: ""); // 构成新文件名。ไฟล์ uploadFile = ไฟล์ใหม่ (uploadFilePath + StorePath + newFileName); ลอง { / ** * 验证上传文件的合法性 * / CommonsMultipartFile cmf = (CommonsMultipartFile) MF; บูลีน isvalid = checkoutFileType.getUpFileLelegItimacyFlag (cmf.getFileItem (), ". jpg.gif.png.jpeg"); if (! isvalid) {system.out.println ("上传图片不合法"); คืนค่า null; } fileCopyutils.copy (mf.getBytes (), uploadfile); StorePath = StorePath + newfilename; } catch (ioexception e) {e.printstacktrace (); }} return StorePath; -文件合法性验证类
แพ็คเกจ com.kaiyuan.common.util; นำเข้า Java.io.FileInputStream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStream; นำเข้า java.util.hashmap; นำเข้า java.util.map; นำเข้า org.apache.Commons.FileUpload.FileItem; / ** * @description: 处理上传附件, 校验是否合法, 故用获取文件头的方式,, * 直接读取文件的前几个字节, 来判断上传文件是否符合格式来判断上传文件是否符合格式 */ คลาสสาธารณะ checkoutfileType {// 记录各个文件头信息及对应的文件类型แผนที่คงที่สาธารณะ <สตริง, สตริง> mfileTypes = new HashMap <String, String> (); // 所有合法的文件后缀สตริงคงที่สาธารณะ res_fileType = ".jpg.gif.png.jpeg"; คงที่ {// 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", "); mFileTypes.put ("0D0A2D2D", ".txt"); // txt MFileTypes.put ("0D0AB4B4", ".txt"); // txt MFileTypes.put ("B4B4BDA8" ".txt"); // txt, 文件头部为英文字母 mfileTypes.put ("32323232", ".txt"); // txt, 文件头部内容为数字 mfileTypes.put ("0d0a09b4", "txt");注意由于文本文档录入内容过多, 则读取文件头时较为多变 -end **/ mfileTypes.put ("7B5C727466", ".rtf"); // 日记本 mfileTypes.put ("2555044462D312E", ".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 ("44656C697666572792D646174653A", ".EML"); // 邮件 mfileTypes.put ("5374616E64617264204A", ".MDB"); // การเข้าถึง数据库文件 MFileTypes.put ("46726F6D", ".MHT"); mfileTypes.put ("4D494D45", ".MHTML"); } / ** * 根据文件的输入流获取文件头信息 * * @param filepath * 文件路径 * @return 文件头信息 * / สตริงคงที่สาธารณะ getFileType (inputStream คือ) {byte [] b = ไบต์ใหม่ [4]; ถ้า (คือ! = null) {ลอง {is.read (b, 0, b.length); } catch (ioexception e) {e.printstacktrace (); }} ส่งคืน mFileTypes.get (getFileHeader (b)); } / ** * 根据文件转换成的字节数组获取文件头信息 * * @param filepath * 文件路径 * @return 文件头信息 * / สตริงคงที่สาธารณะ getFileHeader (byte [] b) {ค่าสตริง = bytestohexstring (b); ค่าส่งคืน; } / ** * 将要读取文件头信息的文件的ไบต์数组转换成สตริง类型表示, * 将字节数组的前四位转换成 16 进制字符串, 并且转换的时候要先和要先和 0xff 做一次与运算。 * 这是因为, 整个文件流的字节数组中, 有很多是负数,, 进行了与运算后进行了与运算后,, @ @ @ Bytestohexstring (byte [] src) {StringBuilder builder = new StringBuilder (); if (src == null || src.length <= 0) {return null; } สตริง HV; สำหรับ (int i = 0; i <src.length; i ++) {// 以十六进制(基数 16) 无符号整数形式返回一个整数参数的字符串表示形式, 并转换为大写 hv = integer.tohexstring (src [i] & 0xff) .touppercase (); if (hv.length () <2) {builder.append (0); } builder.append (HV); } system.out.println ("获取文件头信息:" + builder.toString ()); return builder.toString (); }/ ** * 判断上传的文件是否合法))::,,, (二):::: mime 类型类型 * * @param attaindoc * @return boolean */ บูลีนแบบคงที่ getupfilelegitimacyflag {String attainName = attchDoc.getName (); Sname.toLowerCase (); null; ลอง {req_filetype = getFileType (atthedoc.getInputStream ());第三步: 检查文件扩展名, 是否符合要求范围 **/ ถ้า (req_fileType! = null &&! "". equals (req_fileType) &&! "null" .Equals (req_fileType)) {/ ** 第四步: 校验上传的文件扩展名} else {upflag = false; }} else { / ** 特殊情况校验, 如果用户上传的扩展名为, 文本文件, 则允许上传 -start ** / ถ้า (sname.indexof (". txt")! = -1) {upflag = true; } else {upflag = false; } / ** 特殊情况校验, 如果用户上传的扩展名为, 文本文件, 则允许上传 -end ** /}}}} return upflag; }/** * 主函数, 测试用 * * @param args * @throws Exception */public Static Void Main (String [] args) พ่นข้อยกเว้น {// สตริงสุดท้าย fileType = getFileType ("d: /bicp-huawei.mht"); FileInputStream คือ = null; ค่าสตริง = null; String filepath = "E: /aa/c.txt"; ลอง {is = new FileInputStream (FilePath); ไบต์ [] b = ไบต์ใหม่ [4]; IS.READ (B, 0, B.Length); ค่า = bytestohexstring (b); } catch (exception e) {} ในที่สุด {ถ้า (null! = is) {ลอง {is.close (); } catch (ioexception e) {}}} system.out.println (ค่า); -前端上传 JS
$ (เอกสาร) .ready (function () {textMagnifier ใหม่ ({inputelem: '#BankCardno', จัดเรียง: 'top', splitType: [4,4,4,5,5], คั่น: ''}); $ ('#file_upload') '$ {pageContext.request.contextpath} /js/upload/uploadify.swf', 'uploader': getBasePath ()+'/upload/api_upload; jsessionid = $ {pageContext.session.id}' '$ {pageContext.request.contextpath} /js/upload/uploadify-cancel.png', 'ButtonText': '上传', 'auto': จริง, 'multi': true, 'uploadlimit': 100, 'RemoveCompleted': จริง '*.jpg;*. gif;*. png;*. jpeg;', 'filesizelimit': '2mb', 'fileTypedesc': '上传', 'onuploadSuccess': ฟังก์ชั่น (ไฟล์, ข้อมูล, การตอบสนอง) var uploadfilesize = uploadfiles.length; } isUploadSuccess = true; }, 'onupLoadError': function (ไฟล์, errorcode, errormsg, errorstring) {ถ้า (isrorstring.indexof ('ขีด จำกัด การอัปโหลดมาถึงแล้ว)) {layer.msg (ข้อผิดพลาด); }}, 'onSelect': ฟังก์ชัน (ไฟล์) {// alert ('ไฟล์' + file.name + 'ถูกเพิ่มลงในคิว'); isuploadSuccess = false; }, 'onSeleCterRor': ฟังก์ชัน (ไฟล์, ErrorCode, errormsg) {switch (errorcode) {case -110: layer.msg ("文件大小超过了 2m"); หยุดพัก; กรณี -100: layer.msg ("最多上传 5 张图片"); หยุดพัก; ค่าเริ่มต้น: layer.msg (errormsg); }}, 'ondialogClose': ฟังก์ชั่น (queuedata) {var uploadfiles = $ ("#ตั๋ว"). val (). แยก (','); var uploadFilesize = uploadfiles.length; if (uploadfilesize> 5) {layer.msg ("最多上传 5 张图片"); queuedata.filesselected = 0 return false; - onQuery (); -以上所述是小编给大家介绍的อัปโหลด上传及后台文件合法性验证的代码解析希望对大家有所帮助,, 如果大家有任何疑问请给我留言, 小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!