栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java如何实现文件的上传下载,并对其文件解析

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java如何实现文件的上传下载,并对其文件解析

package com.atguigu.mybatisplus.controller;


import com.atguigu.mybatisplus.enums.CsvEnum;
import com.atguigu.mybatisplus.enums.SexEnum;
import com.atguigu.mybatisplus.mapper.UserMapper;
import com.atguigu.mybatisplus.pojo.User;
import com.atguigu.mybatisplus.service.UserService;
import com.atguigu.mybatisplus.utils.CodeUtil;
import com.atguigu.mybatisplus.utils.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.UrlResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.ResponseEntity;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Scanner;

import static javafx.scene.input.KeyCode.T;

@RestController
@RequestMapping("/file")
@Slf4j
public class CsvFileUploadDownLoad {

    @Autowired
    private UserService userService;

    @Autowired
    private UserMapper userMapper;

    @PostMapping("/upload")
    @Transactional(rollbackFor = Exception.class)
    public R uploadCsvFile(@RequestParam("file") MultipartFile[] files ){
        if(files.length==0||files == null){
           return R.error(1000,"请上传文件");
        }
        for(MultipartFile file:files){
            if(file.isEmpty()){
                return R.error(1003,"请上传文件");
            }
            if(!file.getOriginalFilename().matches("^.+\.(?i)(csv)$")){
                return R.error(1002,"请上传正确格式的csv文件");
            }
            String fileName = file.getOriginalFilename();
            System.out.println(File.separator+"============================");//  
           
            String uploadDest = "D:\whupload"+ File.separator+fileName;
            File destFile = new File(uploadDest);
            try {
                file.transferTo(destFile);
                InputStream inputStream = new FileInputStream(destFile);
                String code = CodeUtil.codeString(destFile);
                Scanner scanner = new Scanner(inputStream, code);
                String firstLine = scanner.next();
                String[] firstTitle = firstLine.split(",");
                ArrayList users = new ArrayList<>();
                while (scanner.hasNextLine()){
                    System.out.println(scanner.hasNextLine());
                    String nextLine = scanner.next();
                    String[] nextLines = nextLine.split(",");
                    User user = new User();
                    for(int i = 0;i downloadFile(@RequestParam("filename") String fileName){
            try {
                Resource resource=new UrlResource(
                        //拼接下载的文件的原路径
                        Paths.get("D:/whupload"+File.separator+fileName).toUri());
                if(resource.exists() && resource.isReadable()){
                    return ResponseEntity.ok()
                            .header(HttpHeaders.CONTENT_TYPE, "application/octet-stream")
                            .header(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename=""+
                                    resource.getFilename()+""").body(resource);

                }
            } catch (MalformedURLException e) {
                e.printStackTrace();
                log.debug(e.getMessage());
            }
            return null;
        }
}



package com.atguigu.mybatisplus.pojo;

import com.atguigu.mybatisplus.enums.SexEnum;
import com.baomidou.mybatisplus.annotation.*;
import lombok.*;

import javax.validation.constraints.Email;


@Data
//设置实体类所对应的表名
//@TableName("t_user")
public class User {

    //将属性所对应的字段指定为主键
    //@TableId注解的value属性用于指定主键的字段
    //@TableId注解的type属性设置主键生成策略
    //@TableId(value = "uid", type = IdType.AUTO)
    @TableId(value = "id",type = IdType.AUTO)
    private Long id;

    //指定属性所对应的字段名
    @TableField("name")
    private String name;

    private Integer age;

    @Email
    private String email;

    private SexEnum sex;

    @TableLogic
    private Integer isDeleted;

}



package com.atguigu.mybatisplus.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import lombok.Getter;


@Getter
public enum SexEnum {
    MALE(1, "男"),
    FEMALE(2, "女");

    @EnumValue //将注解所标识的属性的值存储到数据库中
    private Integer sex;
    private String sexName;

    SexEnum(Integer sex, String sexName) {
        this.sex = sex;
        this.sexName = sexName;
    }

    public static SexEnum getBySexName(String sexName){
        for (SexEnum sexEnum:SexEnum.values()){
            if(sexName.equals(sexEnum.getSexName())){
                return sexEnum;
            }
        }
        return null;
    }
}

```
package com.atguigu.mybatisplus.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;


@Getter
@AllArgsConstructor
public enum CsvEnum {

    NAME("name","setName","String"),
    AGE("age","setAge","Integer"),
    EMAIL("email","setEmail","String"),
    SEX("sex","setSex","enum");
    private String title;
    private String  setMethod;
    private String field;
    public static CsvEnum getSetMethodByTitle(String title){
        System.out.println(title);
        for (CsvEnum csvEnum:CsvEnum.values()){
//            System.out.println(csvEnum.getTitle());
            if(csvEnum.getTitle().equals(title)){
                return csvEnum;
            }
        }
        return null;
    }
}
```




package com.atguigu.mybatisplus.utils;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;

public class CodeUtil {
    public static String codeString(File fileName) {
        String code = "UTF-8";
        try {
            BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));
            int p = (bin.read() << 8) + bin.read();
            bin.close();
            switch (p) {
                case 0xefbb:
                    code = "UTF-8";
                    break;
                case 0xfffe:
                    code = "Unicode";
                    break;
                case 0xfeff:
                    code = "UTF-16BE";
                    break;
                default:
                    code = "GBK";
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return code;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/999067.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号