赞
踩
1.Vue代码
- <template>
- <div class="app-container">
- <el-form :model="queryParams" ref="queryForm" :inline="true" label-width="85px">
- <el-form-item label="工号" prop="userCode">
- <el-input v-model="queryParams.userCode" placeholder="请输入工号" clearable size="small"
- @keyup.enter.native="handleQuery"/>
- </el-form-item>
- <el-form-item label="姓名" prop="nickName">
- <el-input v-model="queryParams.nickName" placeholder="请输入姓名" clearable
- size="small" @keyup.enter.native="handleQuery"/>
- </el-form-item>
- <el-form-item label="部门" prop="deptName">
- <el-input v-model="queryParams.deptName" placeholder="请输入部门" clearable
- size="small" @keyup.enter.native="handleQuery"/>
- </el-form-item>
- <el-form-item>
- <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">查询</el-button>
- <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
- <el-button type="info" icon="el-icon-upload" size="mini" @click="handleImport" v-hasPermi="['riskPredictionData:roster:batchUploadPhoto']">批量上传</el-button>
- </el-form-item>
- </el-form>
-
- <el-row :gutter="10" class="mb8">
- <el-col :span="1.5" v-if="false">
- <el-button
- type="success"
- icon="el-icon-edit"
- size="mini"
- :disabled="single"
- @click="handleUpdate"
- v-hasPermi="['riskPredictionData:roster:uploadPhoto']"
- >上传照片</el-button>
- </el-col>
- </el-row>
-
- <el-table ref="reportSupplier" :key="tamptime" :max-height="tableHeight" v-loading="loading" :data="rosterList" >
- <el-table-column type="index" width="55" label="序号" align="center" />
- <el-table-column label="工号" align="center" prop="userCode" />
- <el-table-column label="姓名" align="center" prop="nickName" />
- <el-table-column label="部门" align="center" prop="deptName" show-overflow-tooltip />
- <el-table-column label="职位" align="center" prop="position" show-overflow-tooltip v-if="false"/>
- <el-table-column label="职务" align="center" prop="post" show-overflow-tooltip/>
- <el-table-column label="头像" align="center" prop="photo" >
- <template slot-scope="scope">
- <el-image :src="baseUrl + '/profile/upload/cadrePhoto/' + scope.row.userCode +'.jpg/'" style="height:50px;width:50px" />
- </template>
- </el-table-column>
- <el-table-column label="操作" align="center" >
- <template slot-scope="scope">
- <el-button
- size="mini"
- type="text"
- icon="el-icon-edit"
- @click="handleUpdate(scope.row)"
- v-hasPermi="['riskPredictionData:roster:uploadPhoto']"
- >上传照片</el-button>
- </template>
- </el-table-column>
- </el-table>
-
- <pagination
- v-show="total>0"
- :total="total"
- :page.sync="queryParams.pageNum"
- :limit.sync="queryParams.pageSize"
- @pagination="getList"
- />
-
- <!-- 花名册入对话框 -->
- <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px">
- <el-upload ref="upload" :limit="1" accept=".zip" :headers="upload.headers"
- :action="upload.url + '?updateSupport=' + upload.updateSupport"
- :disabled="upload.isUploading" :on-progress="handleFileUploadProgress"
- :on-success="handleFileSuccess" :auto-upload="false" drag >
- <i class="el-icon-upload"></i>
- <div class="el-upload__text">
- 将文件拖到此处,或
- <em>点击上传</em>
- </div>
- <div
- class="el-upload__tip"
- slot="tip"
- >
- <!-- <el-checkbox v-model="upload.updateSupport" /> 是否更新已经存在的用户数据 -->
- <!-- <el-link
- type="info"
- style="font-size:12px"
- @click="importTemplate"
- >下载模板</el-link>-->
- </div>
- <div
- class="el-upload__tip"
- style="color:red"
- slot="tip"
- >提示:仅允许导入“zip”格式文件!</div>
- </el-upload>
- <div
- slot="footer"
- class="dialog-footer"
- >
- <el-button
- type="primary"
- @click="submitFileForm"
- >确 定</el-button>
- <el-button @click="upload.open = false">取 消</el-button>
- </div>
- </el-dialog>
- <!-- 添加或修改成员照对话框 -->
- <el-dialog :title="title" :visible.sync="open" width="500px" v-dialog-drag :close-on-click-modal="false">
- <el-form ref="form" :model="form" :rules="rules" label-width="95px">
- <el-form-item label="工号" prop="userCode">
- {{form.userCode}}
- </el-form-item>
- <!-- <el-form-item label="上传证件照" prop="photo">
- <el-upload class="upload-demo"
- ref="upload"
- accept=".jpg"
- :action="uploadPhoto.url+form.userCode"
- :headers="uploadPhoto.headers"
- :before-upload="handleBefore"
- :on-remove="handleRemove"
- :on-success="(res, file)=>{handleSuccess( res, file)}"
- :show-file-list="false"
- >
- <el-button slot="trigger" type="primary">选取文件</el-button>
- <div slot="tip" class="el-upload__tip">上传文件不能超过10M</div>
- </el-upload>
- <el-image style="width: 100px; height: 100px" :src="uploadPhoto.imgUrl" fit="fill"></el-image>
- </el-form-item>-->
- <el-form-item label="上传照片" prop="photo">
- <el-upload
- ref="uploadPhoto"
- class="avatar-uploader"
- :key="tamptimeUploadPhoto"
- :action="uploadPhoto.url+form.userCode"
- :headers="uploadPhoto.headers"
- :show-file-list="false"
- :on-success="(res, file)=>{handleSuccess( res, file)}"
- :before-upload="handleBefore"
- :auto-upload="true">
- <img v-if="uploadPhoto.isShowPhoto" :src="uploadPhoto.imgUrl" class="avatar">
- <i v-else class="el-icon-plus avatar-uploader-icon"></i>
- </el-upload>
- </el-form-item>
- </el-form>
- <div slot="footer" class="dialog-footer">
- <el-button type="primary" @click="submitForm">确 定</el-button>
- <el-button @click="cancel">取 消</el-button>
- </div>
- </el-dialog>
-
- </div>
- </template>
-
- <script>
- import {listRoster, getRoster, exportRoster, importTemplate}
- from "@/api/hr/riskPrediction/data/roster";
- import { getToken } from "@/utils/auth";
- import store from "@/store";
- import axios from "axios";
- export default {
- name: "CadrePhoto",
- data() {
- return {
- // 遮罩层
- loading: true,
- // 选中数组
- ids: [],
- // 非单个禁用
- single: true,
- // 非多个禁用
- multiple: true,
- // 总条数
- total: 0,
- tableHeight:0,
- // 员工风险预判-花名册导入
- rosterList: [],
- // 弹出层标题
- title: "",
- // 是否显示弹出层
- open: false,
- // 查询参数
- queryParams: {
- pageNum: 1,
- pageSize: 10,
- userCode: undefined,
- nickName: undefined,
- deptName: undefined,
- post: '部门负责人',
- },
- // 表单参数
- form: {
- userCode: undefined,
- photo: undefined,
- },
- // 表单校验
- rules: {
- userCode: [
- { required: true, message: "工号不能为空", trigger: "blur" }
- ],
- nickName: [
- { required: true, message: "姓名不能为空", trigger: "blur" }
- ],
- },
- upload: {
- // 是否显示弹出层
- open: false,
- // 弹出层标题
- title: "批量上传",
- // 是否禁用上传
- isUploading: false,
- // 是否更新已经存在的数据
- updateSupport: 0,
- // 设置上传的请求头部
- headers: { Authorization: "Bearer " + getToken() },
- // 上传的地址
- url: process.env.VUE_APP_BASE_API + "/riskPrediction/data/roster/batchUpload"
- },
- options: {
- img: store.getters.avatar, //裁剪图片的地址
- autoCrop: true, // 是否默认生成截图框
- autoCropWidth: 200, // 默认生成截图框宽度
- autoCropHeight: 200, // 默认生成截图框高度
- fixedBox: true // 固定截图框大小 不允许改变
- },
- uploadPhoto: {
- // 设置上传的请求头部
- headers: { Authorization: "Bearer " + getToken() },
- // 上传的地址
- url: process.env.VUE_APP_BASE_API + "/riskPrediction/data/roster/upload/",
- imgUrl: '',
- isShowPhoto: false,
- },
- baseUrl: process.env.VUE_APP_BASE_API,
- tamptime:new Date().valueOf(),
- tamptimeUploadPhoto:new Date().valueOf(),
- };
- },
- created() {
- this.getList();
- },
- mounted() {
- // 设置表格最大高度
- this.$nextTick(() => {
- //屏幕可视化高度-表格上方高度-需求空出高度
- this.tableHeight = window.innerHeight - this.$refs.reportSupplier.$el.offsetTop - 140;
- });
- },
- methods: {
- /** 导入按钮操作 */
- handleImport () {
- this.upload.title = "批量导入";
- this.upload.open = true;
- },
- // 文件上传中处理
- handleFileUploadProgress (event, file, fileList) {
- this.upload.isUploading = true;
- },
- // 文件上传成功处理
- handleFileSuccess (response, file, fileList) {
- this.upload.open = false;
- this.upload.isUploading = false;
- this.$refs.upload.clearFiles();
- if(this.strIsEmpty(response.msg)){
- this.$message({
- message: '请使用模板导入',
- type: 'warning'
- });
- return
- }
- this.$alert(response.msg, "导入结果", { dangerouslyUseHTMLString: true });
- this.getList();
- },
- /** 下载模板操作 */
- importTemplate () {
- importTemplate().then(response => {
- this.download(response.msg);
- });
- },
- // 提交上传文件
- submitFileForm () {
- this.$refs.upload.submit();
- },
- /** 查询员工风险预判-花名册导入 */
- getList() {
- this.loading = true;
- this.tamptime = new Date().valueOf()
- listRoster(this.queryParams).then(response => {
- this.rosterList = response.rows;
- this.total = response.total;
- this.loading = false;
- // 数据并不会更新, 随便调用一下页面事件,什么事件都可以,聚焦等都可以,这里使用 element 表格自带的高亮行事件
- this.$refs.reportSupplier.setCurrentRow(this.rosterList[0])
- });
- },
- /** 搜索按钮操作 */
- handleQuery() {
- this.queryParams.pageNum = 1;
- this.getList();
- },
- /** 重置按钮操作 */
- resetQuery() {
- this.resetForm("queryForm");
- this.handleQuery();
- },
- /** 修改按钮操作 */
- handleUpdate(row) {
- this.reset();
- const userCode = row.userCode
- const _that = this
- getRoster(userCode).then(response => {
- this.form = response.data;
- if(this.form.userCode){
- this.uploadPhoto.imgUrl = process.env.VUE_APP_BASE_API + "/profile/upload/cadrePhoto/" + this.form.userCode +'.jpg'
- axios.get(_that.uploadPhoto.imgUrl)
- .then(function (response) {
- if(response.status == 200){
- _that.uploadPhoto.isShowPhoto = true;
- }
- })
- .catch(function (error) {
- // 处理请求失败的结果
- });
- /*getImgUrl(this.uploadPhoto.imgUrl).then(response=>{
- if(response.status == 200){
- uploadPhoto.isShowPhoto = true;
- }
- }).catch(error => {
- })*/
- }
- this.open = true;
- this.title = "修改照片";
- });
- },
- // 取消按钮
- cancel() {
- this.open = false;
- this.getList()
- },
- /** 提交按钮 */
- submitForm: function() {
- this.open = false;
- this.getList()
- //this.$refs.uploadPhoto.submit();
- },
- reset(){
- this.form = {
- userCode : undefined,
- photo: undefined,
- },
- this.uploadPhoto = {
- // 设置上传的请求头部
- headers: { Authorization: "Bearer " + getToken() },
- // 上传的地址
- url: process.env.VUE_APP_BASE_API + "/riskPrediction/data/roster/upload/",
- imgUrl: '',
- isShowPhoto: false,
- }
- },
- handleBefore (file) {
- var fileExtension = file.name.substring(file.name.lastIndexOf('.') + 1);
- if (["jpg"].indexOf(fileExtension) == -1) {
- //文件类型
- this.$message({
- message: "不支持上传." + fileExtension+ "类型的附件",
- type: 'warning'
- })
- return false;
- }
- if ( file.size > 10485760) {
- //文件不能大于10M
- this.$message({
- message: "上传附件不能大于10M",
- type: 'warning'
- })
- return false;
- }
- },
- handleRemove(file, fileList) {
- },
- handleSuccess(res, file){
- if (res.code === 200) {
- this.uploadPhoto.imgUrl = res.url
- this.form.photo =file.fileName
- this.uploadPhoto.isShowPhoto = true;
- this.tamptimeUploadPhoto = new Date().valueOf()
- }else{
- this.uploadPhoto.imgUrl = null
- this.form.photo = null
- }
- },
- getImgUrl(){
- return this.uploadPhoto.imgUrl
- }
-
- }
- };
- </script>
- <style>
- .avatar-uploader .el-upload {
- border: 1px dashed #d9d9d9;
- border-radius: 6px;
- cursor: pointer;
- position: relative;
- overflow: hidden;
- }
- .avatar-uploader .el-upload:hover {
- border-color: #409EFF;
- }
- .avatar-uploader-icon {
- font-size: 28px;
- color: #8c939d;
- width: 178px;
- height: 178px;
- line-height: 178px;
- text-align: center;
- }
- .avatar {
- width: 178px;
- height: 178px;
- display: block;
- }
- </style>
2.roster.js代码
- import request from '@/utils/request'
-
- // 查询员工风险预判-花名册导入+员工基础信息列表
- export function listRoster(query) {
- return request({
- url: '/riskPrediction/data/roster/list',
- method: 'get',
- params: query
- })
- }
-
- // 查询员工风险预判-花名册导入+员工基础信息详细
- export function getRoster(userCode) {
- return request({
- url: '/riskPrediction/data/roster/' + userCode,
- method: 'get'
- })
- }
-
-
- // 导出员工风险预判-花名册导入+员工基础信息
- export function exportRoster(query) {
- return request({
- url: '/riskPrediction/data/roster/export',
- method: 'get',
- params: query
- })
- }
-
- // 下载模板
- export function importTemplate() {
- return request({
- url: '/riskPrediction/data/roster/importTemplate',
- method: 'get'
- })
- }
3.auth.js代码
- import Cookies from 'js-cookie'
- import router from './../router'
- import store from '@/store'
-
- const TokenKey = 'Admin-Token'
-
-
- const ssoToken = 'sso_session';
-
-
-
- export function getAuthHeader() {
- let header = {};
- if (getToken()) {
- header['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
- }
- let route = router.currentRoute;
- if (route && route.meta && route.meta.roleIds) {
- header['routerRoleIds'] = route.meta.roleIds // 让每个请求携带权限表示
- }
- return header;
- }
-
-
- export function getRedirectRoutePath(toRoute) {
- if(!toRoute) {
- return {path:"/"};
- }
- let toPath = toRoute.path;
- const permissionRoutes = store.getters && store.getters.permission_routes
- if (!permissionRoutes || permissionRoutes.length < 1) {
- return {path:"/"};
- }
- if (toPath == "/") {
- let permissionRootPaths = permissionRoutes.filter(route=>{
- if (route.path == "" && route.children
- && route.children.length > 0 ) {
- let t = route.children[0];
- return t.path == "/bgBoard"
- }
- return false;
- })
- if (permissionRootPaths.length > 0) {
- let t = permissionRootPaths[0].children[0];
- return {path:t.path};
- }
- return {path:"/index"};
- }
- return toRoute;
- }
-
- export function getToken() {
- return Cookies.get(TokenKey)
- }
-
- export function setToken(token) {
- return Cookies.set(TokenKey, token)
- }
-
- export function removeToken() {
- return Cookies.remove(TokenKey)
- }
-
- export function getSSOToken() {
- return Cookies.get(ssoToken)
- }
-
- export function setSSOToken(token) {
- return Cookies.set(ssoToken, token)
- }
-
- export function removeSSOToken() {
- return Cookies.remove(ssoToken)
- }
-
4.后端代码
- package com.goertek.riskPrediction.data.controller;
-
- import com.goertek.framework.aspectj.lang.enums.BusinessType;
- import com.goertek.framework.config.GoerTekConfig;
- import com.goertek.framework.config.ServerConfig;
- import com.goertek.framework.utils.poi.ExcelUtil;
- import com.goertek.framework.web.controller.BaseController;
- import com.goertek.framework.web.domain.AjaxResult;
- import com.goertek.framework.web.page.TableDataInfo;
- import com.goertek.hrLog.HrLog;
- import com.goertek.hrUtils.CadreFileUploadUtils;
- import com.goertek.riskPrediction.data.domain.HrRiskPredictionImportRoster;
- import com.goertek.riskPrediction.data.service.IHrRiskPredictionImportRosterService;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.security.access.prepost.PreAuthorize;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.io.File;
- import java.util.List;
-
- /**
- * 员工风险预判-花名册导入Controller
- *
- * @author xx
- * @date 2021-08-30
- */
- @RestController
- @RequestMapping("/riskPrediction/data/roster")
- public class HrRiskPredictionImportRosterControllerTest extends BaseController
- {
- @Autowired
- private ServerConfig serverConfig;
-
- /**
- * 照片上传请求
- */
- @HrLog(title = "照片上传", businessType = BusinessType.IMPORT)
- @PostMapping("/upload/{userCode}")
- public AjaxResult uploadFile(MultipartFile file,@PathVariable("userCode") String userCode) throws Exception
- {
- try
- {
- String originalFilename = userCode + ".jpg";
- // 上传文件路径
- String filePath = GoerTekConfig.getUploadPath()+ "/cadrePhoto";;
- // 上传并返回新文件名称
- String fileName = CadreFileUploadUtils.upload(filePath, file, originalFilename);
- String url = serverConfig.getUrl() + fileName;
- AjaxResult ajax = AjaxResult.success();
- ajax.put("fileName", fileName);
- ajax.put("url", url);
- ajax.put("realName", file.getOriginalFilename());
- return ajax;
- }
- catch (Exception e)
- {
- return AjaxResult.error(e.getMessage());
- }
- }
-
- @HrLog(title = "批量导入", businessType = BusinessType.IMPORT)
- @PostMapping("/batchUpload")
- public AjaxResult batchUpload(MultipartFile file, boolean updateSupport) throws Exception
- {
- try
- {
- String originalFilename = file.getOriginalFilename();
- // 上传文件路径
- String filePath = GoerTekConfig.getUploadPath()+ "/cadrePhoto";;
- // 上传并返回新文件名称
- String fileName = CadreFileUploadUtils.upload(filePath, file, originalFilename);
- String url = serverConfig.getUrl() + fileName;
- AjaxResult ajax = AjaxResult.success();
- ajax.put("fileName", fileName);
- ajax.put("url", url);
- ajax.put("realName", file.getOriginalFilename());
- //解压
- File zipFile = new File(filePath+"/"+originalFilename);
- File destDir = new File(filePath);
- CadreFileUploadUtils.zipDecompress(zipFile,destDir);
- return ajax;
- }
- catch (Exception e)
- {
- return AjaxResult.error(e.getMessage());
- }
- }
-
-
-
-
- }
5.CadreFileUploadUtils.java
- package com.goertek.hrUtils;
-
- import com.goertek.framework.config.GoerTekConfig;
- import com.goertek.framework.constant.Constants;
- import com.goertek.framework.exception.file.FileNameLengthLimitExceededException;
- import com.goertek.framework.exception.file.FileSizeLimitExceededException;
- import com.goertek.framework.exception.file.InvalidExtensionException;
- import com.goertek.framework.utils.DateUtils;
- import com.goertek.framework.utils.StringUtils;
- import com.goertek.framework.utils.file.MimeTypeUtils;
- import com.goertek.framework.utils.security.Md5Utils;
- import org.apache.commons.io.FilenameUtils;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipInputStream;
-
- /**
- * 文件上传工具类
- *
- * @author admin
- */
- public class CadreFileUploadUtils {
-
- /**
- * 默认的文件名最大长度 100
- */
- public static final int DEFAULT_FILE_NAME_LENGTH = 100;
-
- /**
- * 默认上传的地址
- */
- private static String defaultBaseDir = GoerTekConfig.getProfile();
-
- private static int counter = 0;
-
- public static void setDefaultBaseDir(String defaultBaseDir) {
- CadreFileUploadUtils.defaultBaseDir = defaultBaseDir;
- }
-
- public static String getDefaultBaseDir() {
- return defaultBaseDir;
- }
-
- /**
- * 以默认配置进行文件上传
- *
- * @param file 上传的文件
- * @return 文件名称
- * @throws Exception
- */
- public static final String upload(MultipartFile file, String fileName) throws IOException {
- try {
- return upload(getDefaultBaseDir(), file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, fileName);
- } catch (Exception e) {
- throw new IOException(e.getMessage(), e);
- }
- }
-
- /**
- * 根据文件路径上传
- *
- * @param baseDir 相对应用的基目录
- * @param file 上传的文件
- * @return 文件名称
- * @throws IOException
- */
- public static final String upload(String baseDir, MultipartFile file, String fileName) throws IOException {
- try {
- return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, fileName);
- } catch (Exception e) {
- throw new IOException(e.getMessage(), e);
- }
- }
-
-
-
- /**
- * 根据文件路径上传
- *
- * @param baseDir 相对应用的基目录
- * @param file 上传的文件
- * @return 文件名称
- * @throws IOException
- */
- public static final String uploadWithoutDate(String baseDir, MultipartFile file) throws IOException {
- try {
- int fileNamelength = file.getOriginalFilename().length();
- if (fileNamelength > com.goertek.framework.utils.file.FileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
- throw new FileNameLengthLimitExceededException(com.goertek.framework.utils.file.FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
- }
-
- // assertAllowed(file, allowedExtension);
-
- String fileName = file.getOriginalFilename();
- File desc = getAbsoluteFile(baseDir, fileName);
- file.transferTo(desc);
- String pathFileName = getPathFileName(baseDir, fileName);
- return pathFileName;
- } catch (Exception e) {
- throw new IOException(e.getMessage(), e);
- }
- }
-
-
- /**
- * 文件上传
- *
- * @param baseDir 相对应用的基目录
- * @param file 上传的文件
- * @return 返回上传成功的文件名
- * @throws FileSizeLimitExceededException 如果超出最大大小
- * @throws FileNameLengthLimitExceededException 文件名太长
- * @throws IOException 比如读写文件出错时
- * @throws InvalidExtensionException 文件校验异常
- */
- public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension, String fileName)
- throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
- InvalidExtensionException {
- int fileNamelength = file.getOriginalFilename().length();
- if (fileNamelength > CadreFileUploadUtils.DEFAULT_FILE_NAME_LENGTH) {
- throw new FileNameLengthLimitExceededException(CadreFileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
- }
-
-
- //String fileName = extractFilename(file);
- //String fileName = file.getOriginalFilename();
-
- File desc = getAbsoluteFile(baseDir, fileName);
- file.transferTo(desc);
- String pathFileName = getPathFileName(baseDir, fileName);
- return pathFileName;
- }
-
- /**
- * 编码文件名
- */
- public static final String extractFilename(MultipartFile file) {
- String fileName = file.getOriginalFilename();
- String extension = getExtension(file);
- fileName = DateUtils.datePath() + "/" + encodingFilename(fileName) + "." + extension;
- return fileName;
- }
-
-
-
- private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException {
- File desc = new File(uploadDir + File.separator + fileName);
-
- if (!desc.getParentFile().exists()) {
- desc.getParentFile().mkdirs();
- }
- if (!desc.exists()) {
- desc.createNewFile();
- }else{
- desc.createNewFile();
- }
- return desc;
- }
-
- private static final String getPathFileName(String uploadDir, String fileName) throws IOException {
- int dirLastIndex = GoerTekConfig.getProfile().length() + 1;
- String currentDir = StringUtils.substring(uploadDir, dirLastIndex);
- String pathFileName = Constants.RESOURCE_PREFIX + "/" + currentDir + "/" + fileName;
- return pathFileName;
- }
-
- /**
- * 编码文件名
- */
- private static final String encodingFilename(String fileName) {
- fileName = fileName.replace("_", " ");
- fileName = Md5Utils.hash(fileName + System.nanoTime() + counter++);
- return fileName;
- }
-
- /**
- * 文件大小校验
- *
- * @param file 上传的文件
- * @return
- * @throws FileSizeLimitExceededException 如果超出最大大小
- * @throws InvalidExtensionException
- */
- public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
- throws FileSizeLimitExceededException, InvalidExtensionException {
- long size = file.getSize();
-
- String fileName = file.getOriginalFilename();
- String extension = getExtension(file);
- if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension)) {
- if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION) {
- throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
- fileName);
- } else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION) {
- throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
- fileName);
- } else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION) {
- throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
- fileName);
- } else {
- throw new InvalidExtensionException(allowedExtension, extension, fileName);
- }
- }
-
- }
-
- /**
- * 判断MIME类型是否是允许的MIME类型
- *
- * @param extension
- * @param allowedExtension
- * @return
- */
- public static final boolean isAllowedExtension(String extension, String[] allowedExtension) {
- for (String str : allowedExtension) {
- if (str.equalsIgnoreCase(extension)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * 获取文件名的后缀
- *
- * @param file 表单文件
- * @return 后缀名
- */
- public static final String getExtension(MultipartFile file) {
- String extension = FilenameUtils.getExtension(file.getOriginalFilename());
- if (StringUtils.isEmpty(extension)) {
- extension = MimeTypeUtils.getExtension(file.getContentType());
- }
- return extension;
- }
-
-
- public static String getUploadFile(String url) {
- if (!url.startsWith("/")) {
- url = "/" + url;
- }
- if (url.startsWith(Constants.RESOURCE_PREFIX)) {
- url = url.substring(Constants.RESOURCE_PREFIX.length());
- }
- return GoerTekConfig.getProfile() + "/" + url;
- }
-
- /**
- * 解压缩ZIP文件
- * @param zipFile ZIP文件
- * @param destDir 目标路径
- */
- public static void zipDecompress(File zipFile, File destDir) {
- byte[] buffer = new byte[1024];
- try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
- ZipEntry entry = zis.getNextEntry();
- while (entry != null) {
- File file = new File(destDir, entry.getName());
- if (entry.isDirectory()) {
- file.mkdirs();
- } else {
- File parent = file.getParentFile();
- if (!parent.exists()) {
- parent.mkdirs();
- }
- try (FileOutputStream fos = new FileOutputStream(file)) {
- int len;
- while ((len = zis.read(buffer)) > 0) {
- fos.write(buffer, 0, len);
- }
- }
- }
- entry = zis.getNextEntry();
- }
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。