AliOss的文件上传

文件上传

前端的代码:标红处必须是这样不可以更改 

文件上传前端三要素:
1.post提交表单方式

2.编码格式enctype必须是muitipart/form-data,这种格式适合传输数据量大的二进制数据文件

3.类型必须是file类

 1.编写静态页面,将静态资源放置在static下

 

本地存储

在服务端,接收到上传上来的文件之后,将文件存储在本地服务器磁盘中。

接口方法

    @PostMapping("/upload")
    public String upload(MultipartFile image) throws IOException {
        //获取文件名
        String originalFilename = image.getOriginalFilename();

        //构造唯一文件名,确保后来上传的文件不会和之前上传的文件名重复,从而覆盖原来的文件
        String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
        String fileName = UUID.randomUUID().toString() + suffix;

        //存储文件到本地磁盘
        image.transferTo(new File("D:\\reggie_dish_img\\sky\\" + fileName));

        return null;
    }

 

在SpringBoot中,文件上传,默认单个文件允许最大大小为1M。如果需要上传大文件
可以进行如下配置:

#配置单个文件最大上传限制
spring.servlet.multipart.max-file-size=10MB
#配置单次请求最大上传限制
spring.servlet.multipart.max-request-size=100MB

云存储(AliOss)

使用阿里云云存储可以解决掉服务器本地存储的一些问题,比如:服务器磁盘满了,磁盘坏了等问题

1创建阿里云账号开通oss云服务

2.在Maven工程中使用OSS Java SDK,只需在pom.xml中加入相应依赖即可。
jdk9之前的版本:

<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</ artifactId><version>3.15.1</version>
< / dependency>

如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下:
 

<dependency>
<groupId>javax.xml. bind</groupId>
<artifactId>jaxb-api</ artifactId><version>2.3.1</version>
< / dependency>
<dependency>

<dependency>
<groupId>javax.activation</groupId><artifactid>activation</ artifactId><version>1.1.1</version>
</ dependency>
<! -- no more than 2.3.3-->

<dependency>
<groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime< / artifactId><version>2.3.3</version>
< / dependency>

3.阿里云工具类

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {

//    @Value("${aliyun.oss.endpoint}")
//    private String endpoint ;
//    @Value("${aliyun.oss.accessKeyId}")
//    private String accessKeyId ;
//    @Value("${aliyun.oss.accessKeySecret}")
//    private String accessKeySecret ;
//    @Value("${aliyun.oss.bucketName}")
//    private String bucketName ;

    @Autowired
    private AliOSSProperties aliOSSProperties;

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        //获取阿里云OSS参数
        String endpoint = aliOSSProperties.getEndpoint();
        String accessKeyId = aliOSSProperties.getAccessKeyId();
        String accessKeySecret = aliOSSProperties.getAccessKeySecret();
        String bucketName = aliOSSProperties.getBucketName();

        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        // 关闭ossClient
        ossClient.shutdown();
        return url;// 把上传到oss的路径返回
    }

}

阿里云配置类

@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {
    private String endpoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
}

在配置文件中配置阿里云相关信息(将信息改成自己的)

 4.定义阿里云文件上传接口方法

 5.测试接口

上传本地文件后,会将文件上传到oss中,接口会将上传的url返回给前端,前端可以直接通过url对图片进行回显

文件下载 (本地存储)

前端向服务器请求回显图片(下载服务器的文件)

//文件的下载    将服务器上传的图片文件上传到浏览器(图片的回显)
    @GetMapping("/download")
    //name : 前端页面收到的后端发送的文件名  fileName
    public void download(String name, HttpServletResponse response){
        log.info(name);

        try {
            //输入流,通过输入流读取文件内容
            FileInputStream fileInputStream =new FileInputStream(new File(basePath+name));
            //输出流,通过输出流将文件写回浏览器,在浏览器显示图片
            ServletOutputStream outputStream = response.getOutputStream();
            //响应的是图片(固定格式)
            response.setContentType("image/jpeg");

            int len=0;
            byte[] bytes=new byte[1024];
            while ((len = fileInputStream.read(bytes)) != -1){
                outputStream.write(bytes,0,len);
                outputStream.flush();
            }

            //关闭资源
            outputStream.close();
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值