文本-----富文本图片上传手工资料(上)实现图片上传和下载简单代码

简介: 文本-----富文本图片上传手工资料(上)实现图片上传和下载简单代码

最终期望看到的是图片能够存储了:

1、第一步要有上传的接口:先写一个接口,写一个FullTextController层

2、再写一个简单的基本结构: 定义一下文件保存路径

package zero.file.videoProject.controller;
 
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
 
@RequestMapping("/fullText")
@RestController
public class FullTextController {
    private static final String STORE_DIR = "D:\\project\\零一电科\\技术资料\\lingyidianke\\zeroBackEnd\\ZerosBackEnd\\src\\main\\resources\\pict\\";
    
}

3、再引入依赖:

<dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.11.0</version>
</dependency>

4、再写一个FullTextController上传文件的接口

package zero.file.videoProject.controller;
 
import org.apache.commons.io.FileUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
 
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;
 
@RequestMapping("/fullText")
@RestController
public class FullTextController {
    private static final String STORE_DIR = "D:\\project\\零一电科\\技术资料\\lingyidianke\\zeroBackEnd\\ZerosBackEnd\\src\\main\\resources\\pict\\";
    @RequestMapping("/file/upload")
    public Object uploadPict(@RequestParam("image") MultipartFile file) throws IOException {
        // 获取文件流
        // 获取文件真实名字
        String fileName = UUID.randomUUID().toString().substring(0, 10) + file.getOriginalFilename();
        // 在服务器中存储文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(STORE_DIR + fileName));
        // 返回图片url
       
    }
}

5、接下来图片访问url,写好domain的请求接口,本质这个URL是请求的下载的接口:

6、在编写上面之前,要写好下载文件的接口,编写接口的,下载接口的编写流程是保证编写的路径,找到之后,将他以流的形式的存储到文件当中:

7、写成这样就可以了

package zero.file.videoProject.controller;
 
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
 
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
 
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.UUID;
import javax.servlet.http.HttpServletResponse;
 
@RequestMapping("/fullText")
@RestController
public class FullTextController {
    private static final String STORE_DIR = "D:\\project\\零一电科\\技术资料\\lingyidianke\\zeroBackEnd\\ZerosBackEnd\\src\\main\\resources\\pict\\";
    private static final String DOMAIN = "http://localhost:9090/fullText/file/download/";
    static class Success {
        public final int errno;
        public final Object data;
        public Success(String url) {
            this.errno = 0;
            HashMap<String, String> map = new HashMap<>();
            map.put("url", url);
            this.data = map;
        }
    }
    @RequestMapping("/file/upload")
    public Object uploadPict(@RequestParam("image") MultipartFile file) throws IOException {
        // 获取文件流
        // 获取文件真实名字
        String fileName = UUID.randomUUID().toString().substring(0, 10) + file.getOriginalFilename();
        // 在服务器中存储文件
        FileUtils.copyInputStreamToFile(file.getInputStream(), new File(STORE_DIR + fileName));
        // 返回图片url
        String url = DOMAIN + fileName;
        return new Success(url);
    }
    @GetMapping("/file/download/{fileName}")
    public void download(@PathVariable("fileName") String fileName, HttpServletRequest request, HttpServletResponse response) {
        // 获取真实的文件路径
        String filePath = STORE_DIR + fileName;
        System.out.println("++++完整路径为:"+filePath);
        try {
            // 下载文件
            // 设置响应头
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
            response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);
            // 读取文件内容并写入输出流
            Files.copy(Paths.get(filePath), response.getOutputStream());
            response.getOutputStream().flush();
        } catch (IOException e) {
            response.setStatus(404);
        }
    }
}

8、 写成这样,请求方式写成GET Params写成Body,form-data写成file,参数名为image

9、这样上传图片的接口就写好了


相关文章
|
Java Spring
Spring boot 运行服务jar外配置配置文件方式总结
Spring boot 运行服务jar外配置配置文件方式总结
1692 0
|
存储 Java
Springboot 验证码生成和校验,图片格式和base64编码串
Springboot 验证码生成和校验,图片格式和base64编码串
1144 0
Springboot 验证码生成和校验,图片格式和base64编码串
|
9月前
|
机器学习/深度学习 运维 安全
联邦学习系统攻击与防御技术研究综述
联邦学习作为新兴技术,能解决分布式数据隐私泄露问题,广泛应用于各领域。但其在数据收集、训练和推理阶段存在安全与隐私威胁。本文围绕机密性、完整性和可用性,定义联邦学习的安全属性,系统综述攻击方式(投毒、对抗样本、推理攻击等)及防御手段(鲁棒性提升、隐私增强技术),并提出未来研究方向。
|
传感器
SFNC —— 采集控制(四)(中)
SFNC —— 采集控制(四)
547 4
|
Java 数据库连接 API
什么是 Hibernate?为什么使用 Hibernate?
【8月更文挑战第21天】
524 0
|
存储 运维 Java
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
Spring运维之boot项目开发关键之日志操作以及用文件记录日志
237 2
|
存储 JavaScript 网络安全
XSS 攻击是什么?如何防护?
XSS 攻击是什么?如何防护?
430 0
|
搜索推荐 前端开发 小程序
计算机java项目|Springboot 智能菜谱推荐系统
计算机java项目|Springboot 智能菜谱推荐系统
512 0
|
JavaScript Java 关系型数据库
SpringBoot + Mybatis + Vue的代码生成器
SpringBoot + Mybatis + Vue的代码生成器
346 2
|
缓存 安全 数据安全/隐私保护
GET和POST有什么区别
GET和POST有什么区别