文件上传

配置文件配置baseUrl

文件 params.properties配置,此路径的绝对路径为:E:/home/gscq073240j/myfile/temp_qbs5/ (E盘为项目所在的磁盘)


图片.png

在初始化类中配置不同文件保存的不同的文件夹

@Component
@PropertySource("classpath:conf/params.properties")
public class FileUploadPathConfig {

    @Value("${baseFilePath}")
    String basePath;

    public static String UPLOAD_PATH = null;

    public static String IMG_PATH = null;

    public static String VIDEO_PATH = null;

    public static String AUDIO_PATH = null;

    public static String TYPE_PATH = null;

    public static String EXCEL_PATH = null;

    public static String TYPE_TEMPLATE = null;

    public static String QUESTION_PATH = null;

    public static String QUESTION_EXCEL_PATH = null;

    public static String QUESTION_EXCEL_TEMPLATE = null;

    public static String QUESTION_EXCEL_TEMP_PATH = null;

    public static String QUESTION_FILE = null;



    @PostConstruct
    void init() {
        UPLOAD_PATH = basePath;
        IMG_PATH = UPLOAD_PATH + "img/";
        VIDEO_PATH = UPLOAD_PATH + "video/";
        AUDIO_PATH = UPLOAD_PATH + "audio/";
        TYPE_PATH = UPLOAD_PATH + "type/";
        EXCEL_PATH = TYPE_PATH + "excel/";
        TYPE_TEMPLATE = TYPE_PATH + "type_template__.xls";
        QUESTION_PATH = UPLOAD_PATH + "question/";
        QUESTION_EXCEL_PATH = QUESTION_PATH + "excel/";
        QUESTION_EXCEL_TEMPLATE = QUESTION_EXCEL_PATH + "question_template__.xlsx";
        QUESTION_EXCEL_TEMP_PATH = QUESTION_EXCEL_PATH + "temp/";
        QUESTION_FILE = QUESTION_PATH + "file/";
    }

}

配置之后图片的保存路径为:/home/gscq073240j/myfile/temp_qbs5/img/

图片上传接口:

@ResponseBody
    @PostMapping(value = "/fileUpload")
    public Result fileUpload(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) {
        File aa = new File(FileUploadPathConfig.IMG_PATH ) ;
        if (!new File(FileUploadPathConfig.IMG_PATH).exists()){
            new File(FileUploadPathConfig.IMG_PATH).mkdirs();
        }
        if (file.isEmpty()) {
            return ResultFactory.buildFailResult("文件为空");
        }
        String filePath = null, returnPath = null, suffixName = null;
        try {
            byte[] b = new byte[4];
            file.getInputStream().read(b, 0, b.length);
            String type = bytesToHexString(b).toUpperCase();
            if (type.contains("0000001C") || type.contains("00000020")) {
                //视频文件
                filePath = FileUploadPathConfig.VIDEO_PATH;
                returnPath = "/upload/video/";
                suffixName = ".mp4";
            } else if (type.contains("FFD8FFE0")) {
                // 图片格式
                filePath = FileUploadPathConfig.IMG_PATH;
                returnPath = "/upload/img/";
                BufferedImage image = ImageIO.read(file.getInputStream());
                if (image != null) {
                    if (image.getWidth() == 0) {
                        return ResultFactory.buildFailResult("图片格式不规范!");
                    }
                    if (file.getSize() > 1 * 1024 * 200) {
                        return ResultFactory.buildFailResult("小于200KB的照片才允许上传!");
                    }
                } else {
                    return ResultFactory.buildFailResult("图片格式不规范!");
                }
                suffixName = ".jpg";
            } else if (type.contains("49443304")) {
                // 音频文件
                filePath = FileUploadPathConfig.AUDIO_PATH;
                returnPath = "/upload/audio/";
                suffixName = ".mp3";
            } else {
                return ResultFactory.buildFailResult("不支持上传文件格式");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        String fileContentType = file.getContentType();
        String fileName = file.getOriginalFilename();  // 文件名
//         suffixName = fileName.substring(fileName.lastIndexOf("."));  // 后缀名
        fileName = UUID.randomUUID() + suffixName; // 新文件名
        String absolutePath = new File(filePath).getAbsolutePath();
        File dest = new File(new File(filePath).getAbsolutePath()+"/"+ fileName);
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();
        }
//        FileOutputStream out = new FileOutputStream(fileName);
//        out.write(file.getBytes());
//        out.flush();
//        out.close();
        try {
            file.transferTo(dest);
        } catch (IOException e) {
            e.printStackTrace();
            return ResultFactory.buildFailResult(e.getMessage());
        }
        return ResultFactory.buildSuccessResult(returnPath + fileName);
    }

返回的图片路径为 //upload/img/+uuid的值.jpg ,但是实际图片存放的路径为E:/home/gscq073240j/myfile/temp_qbs5/img/uuid的值.jpg.
项目的页面样式为


图片.png

图片此时的回显


图片.png

访问的路径如上图。

所以需要配置静态资源访问路径:

@Configuration
public class SpringWebMvcConfigurer extends WebMvcConfigurationSupport {
    /**
     * 配置静态访问资源
     */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
      /*  String p = new File(path).getAbsolutePath() + File.separator;//取得在服务器中的绝对路径
        System.out.println("Mapping /upload/** from " + p);
        registry.addResourceHandler("/upload/**") // 外部访问地址
                .addResourceLocations("file:" + p)// springboot需要增加file协议前缀
                .setCacheControl(CacheControl.maxAge(30, TimeUnit.MINUTES));// 设置浏览器缓存30分钟*/
        // 覆盖默认配置,自定义
        registry.addResourceHandler("/upload/**").addResourceLocations("file:"+ FileUploadPathConfig.UPLOAD_PATH);
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/", "classpath:/static/static/");
        super.addResourceHandlers(registry);
    }
}

此时图片就能回显了。

添加用户,保存包数据库

控制层:
/**
     * 新增专家用户
     * @param userModel
     * @return
     */
    @RequestMapping(value = "/addUser")
    @ResponseBody
    public Result addUser(@RequestBody UserModel userModel) {
        return userService.addUser(userModel);
    }
service层
@Override
    @Transactional(rollbackFor = Exception.class)
    public Result addUser(@RequestBody UserModel userModel) {
        UserEntity userEntity = userModel.prototype();  //model类转实体类
        try {
            userEntity.setCardIdPath(FileUtils.nomenclator(userEntity.getCardId(),
                    FileUploadPathConfig.IMG_PATH + userEntity.getCardIdPath().replace(userModel.getBaseUrl(),
                            ""), UserEntity.CARDID_FRONT));
            userEntity.setCardIdPathBack(FileUtils.nomenclator(userEntity.getCardId(),
                    FileUploadPathConfig.IMG_PATH + userEntity.getCardIdPathBack().replace(userModel.getBaseUrl(),
                            ""), UserEntity.CARDID_BACK));
            userEntity.setProfessionalPath(FileUtils.nomenclator(userEntity.getCardId(),
                    FileUploadPathConfig.IMG_PATH + userEntity.getProfessionalPath().replace(userModel.getBaseUrl(),
                            ""), UserEntity.PROFESSIONAL));
            userEntity.setQualificationCertificatePath(FileUtils.nomenclator(userEntity.getCardId(),
                    FileUploadPathConfig.IMG_PATH + userEntity.getQualificationCertificatePath().replace(userModel.getBaseUrl(),
                            ""), UserEntity.QUALIFICATION));
        } catch (IOException e) {
            e.printStackTrace();
        }
        userMapper.insertSelective(userEntity);
        return ResultFactory.buildSuccessResult(null);
    }

nomenclator 方法

将存入数据库的值/upload/img/uuid的值.jpg改为/upload/img/身份证号.jpg,并将文件夹中实际的图片的文件名renameto(文件移动)为身份证号.jpg


图片.png
public class FileUtils {
    public static String nomenclator(String cardId, String path, String name) throws IOException {

        String replace = path.replace("/upload/img/", "");
        File file = new File(replace);
        if (!file.exists()) {
            file.createNewFile();
        }
        String parent = file.getParent(); //根路径
        String suffixName = file.getName().substring(file.getName().lastIndexOf("."));
        String s = parent + File.separator + cardId + "_" + name + suffixName;
        File newFile = new File(s);
        if (newFile.exists() && newFile.isFile()) {
            newFile.delete();
        }
        File f = new File(s);
        if (file.renameTo(f)) {
            String aa = "/upload/img/" + f.getName();
            return "/upload/img/" + f.getName();
        }
        return null;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,651评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,468评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,931评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,218评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,234评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,198评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,084评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,926评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,341评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,563评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,731评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,430评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,036评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,676评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,829评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,743评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,629评论 2 354

推荐阅读更多精彩内容

  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 3,844评论 0 5
  • WEB安全漏洞中,与文件操作相关的漏洞类型就不少,在大部分的渗透测试过程中,上传文件(大、小马)是必不可少的一个流...
    CanMeng阅读 579评论 1 7
  • 原文地址:https://xz.aliyun.com/t/6357 1. 文件上传漏洞 1.1 漏洞简介 ​ 文件...
    这是什么娃哈哈阅读 1,692评论 0 0
  • 在火车上摇摇晃晃地敲下这些字! 今天在群里看见了一个小伙伴写的文章,关于肥胖的人被歧视的话题,猛然就想到了那天下午...
    心若水容万物阅读 284评论 0 1
  • 有时候 我想做你爸爸 告诉你: 如果我是你爸爸 在你很小的时候 我会每天抱着你 给你讲故事换尿布搭积木 好好疼爱你...
    千鸟和她阅读 271评论 0 1