springboot中实现文件上传下载

引言
之前使用springMVC进行文件上传只是上传到本地,这样很不适合项目发布,所以尝试一下如何把上传文件上传到服务器上。

1. 新建maven项目

2. 添加依赖

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-spec</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.taglibs</groupId>
            <artifactId>taglibs-standard-impl</artifactId>
            <version>1.2.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
            <version>8.5.34</version>
        </dependency>
        <!-- 跨服务器上传 -->
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-core</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.18.1</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
    </dependencies>
  • 配置文件
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
# all files max 
spring.servlet.multipart.max-request-size=10MB
# one file max
spring.servlet.multipart.max-file-size=10MB

#file normal path
file.staticAccessPath=/image/**
#file real path
file.uploadFolder=http://你自己买的服务器的ip/imgs/

这里的页面采用的是jsp

  • 编写配置类
@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    
       @Value("${file.staticAccessPath}")
        private String staticAccessPath;
      
       @Value("${file.uploadFolder}")
        private String uploadFolder;
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {

  //staticAccessPath 表示上传的文件地址,uploadFolder表示真实的上传地址
  registry.addResourceHandler(staticAccessPath).addResourceLocations(uploadFolder);
    }
}
  • 写controller 实现功能
@Controller
public class FileUploadController {

    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @GetMapping("/fileupload")
    public String fileupload() {
        return "fileupload";
    }

    /**
     * 上传到本地
     * 
     * @param file
     * @return
     */
    @PostMapping("/fileUpload")
    @ResponseBody
    public String upload(@RequestParam("file") MultipartFile file) {
        if (file.isEmpty()) {
            return "上传失败,请选择文件";
        }
        String fileName = file.getOriginalFilename();
        String filePath = "D:/test/";
        File dest = new File(filePath + fileName);
        try {
            file.transferTo(dest);
            return "上传成功";
        } catch (IOException e) {
            e.printStackTrace();
        }
        return "上传失败!";
    }

    /**
     * 跨服务器文件上传
     * 
     */
    @ResponseBody
    @PostMapping("/fileupload3")
    public String fileuoload3(@RequestParam("file") MultipartFile file) {
        System.out.println("跨服务器文件上传...");

        // 定义上传文件服务器路径
        String path = uploadFolder;

        // 获取上传文件的名称
        String filename = file.getOriginalFilename();

        // 创建客户端的对象
        Client client = Client.create();
        InputStream inputStream = null;
        try {
            inputStream = file.getInputStream();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        // 将文件传入文件服务器
        WebResource resource = client.resource(path + filename);
        resource.put(String.class, inputStream);

        return "success";
    }

    /**
     * 实现文件下载
     * @param request
     * @param fileName
     * @return
     * @throws IOException
     */
       @RequestMapping(value = "/download", method = RequestMethod.GET)
        public ResponseEntity<byte[]> download(HttpServletRequest request, HttpServletResponse response, @RequestParam("fileName") String fileName) throws IOException {
           
             BufferedInputStream in = null;
             ByteArrayOutputStream out = null;
             URLConnection conn = null;
             HttpHeaders headers = new HttpHeaders();
             headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);;
             headers.setContentDispositionFormData("attachment", new String(fileName.getBytes("UTF-8"),"iso-8859-1"));
             try {
                 URL url = new URL(uploadFolder+fileName);
                 conn = url.openConnection();
                 in = new BufferedInputStream(conn.getInputStream());
                 out = new ByteArrayOutputStream(1024);
                 byte[] temp = new byte[1024];
                 int size = 0;
                 while ((size = in.read(temp)) != -1) {
                     out.write(temp, 0, size);
                 }
                 byte[] content = out.toByteArray();
                 return new ResponseEntity<>(content, headers, HttpStatus.OK);
             } catch (Exception e) {
                 e.printStackTrace();
             } finally {
                     in.close();
                     out.close();
             }
            return null;
        }
}
  • 测试
    运行项目,测试上传,然后登录自己的服务器就会发现已经上传成功!
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,367评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,959评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,750评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,226评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,252评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,975评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,592评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,497评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,027评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,147评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,274评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,953评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,623评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,143评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,260评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,607评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,271评论 2 358