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

本地文件上传到阿里云OSS

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

本地文件上传到阿里云OSS

写在前面(准备工作):         (1)依赖引入
    
      org.springframework
      spring-webmvc
      5.3.19
    
    
      javax.servlet
      javax.servlet-api
      4.0.1
    
    
      org.projectlombok
      lombok
      1.18.24
    
    
      com.fasterxml.jackson.core
      jackson-databind
      2.13.2.2
    


    
      commons-fileupload
      commons-fileupload
      1.4
    


    
      com.aliyun.oss
      aliyun-sdk-oss
      3.10.2
    
        (2)DispatcherServlet配置

        由于有次忘记配置,就找了半天也不知道错哪了,就很烦,特在此注重解释

        DispatcherServlet是Spring MVC中最核心的对象;DispatcherServlet用于拦截Http请求;并根据请求的URL,找到与之对应的Controller控制器中的方法,来完成对该Http请求的处理


  
    DispatcherServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
  
  
    DispatcherServlet
    /
  
        (3)在springmvc配置文件中配置文件上传解析器 



    
    

    
    
    






    
        
    

        (4)阿里云OSS 

        之后依据密钥对Bucket进行上传文件(可以理解为id和密码,输入后可以确认身份进行上传) 

         准备工作完成

1. 进行文件上传 

        (1)先去阿里云官方给的OSS帮助文档中查看安装(这里前面已经引入过以来了)

        (2) 查看文件流上传(这是官网给的上传代码,根据上面提示进行修改)

package com.lcy.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.UUID;


@Controller
public class UploadController {

    @RequestMapping("upload03")
    public String upload03(MultipartFile myfile, HttpServletRequest request) throws IOException {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "你的密钥id";
        String accessKeySecret = "你的密钥密码";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "luckylcy";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        LocalDateTime ldt = LocalDateTime.now();

        String objectName = ldt.getYear() + "/" + ldt.getMonthValue() + "/" + ldt.getDayOfMonth() +
                "/" + UUID.randomUUID().toString().replace("-","") + myfile.getOriginalFilename();

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            InputStream inputStream = myfile.getInputStream();
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
//        http://luckylcy.oss-cn-hangzhou.aliyuncs.com/2022/6/10/08e69a25ebb74fdcbf165f63730286b8yl.png
        String url = "http://" + bucketName + "." + endpoint + "/" + objectName;
        request.setAttribute("imgUrl",url);
        return "success.jsp";
    }
}

        (3)创建页面

<%--
  Created by IntelliJ IDEA.
  User: lcy28
  Date: 2022/6/9
  Time: 18:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title


    

        (4)运行Tomcat,进行文件上传

        提交成功后,就可以通过网址进行访问了。 

3. ElementUI + Vue + axios 进行文件上传。

        (1)页面设计

<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    Title
    
    
    
    
    
    
    
    

    




    
        
            
                
                
            
        
        
            
        
        
            
        
        
            
        
        
            提交
        
    




        (2) 把上传文件的代码封装到一个Util工具类中,并设计一个CommonResult类:处理器接收信息处理后返回的数据(返回的是一个字符串,表示上传后文件的访问路径)

package com.lcy.util;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.time.LocalDateTime;
import java.util.UUID;


public class OSSUtil {
    public static String upload(MultipartFile file){
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "oss-cn-hangzhou.aliyuncs.com";
        // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
        String accessKeyId = "LTAI5tLAogJbV3tD7xcve3Lj";
        String accessKeySecret = "fUAwJtRJLA6kdAGNS6I43FfWXHFCQB";
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "luckylcy";
        // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
        LocalDateTime ldt = LocalDateTime.now();

        String objectName = ldt.getYear() + "/" + ldt.getMonthValue() + "/" + ldt.getDayOfMonth() +
                "/" + UUID.randomUUID().toString().replace("-","") + file.getOriginalFilename();

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try {
            InputStream inputStream = file.getInputStream();
            // 创建PutObject请求。
            ossClient.putObject(bucketName, objectName, inputStream);
        } catch (Exception e){
            e.printStackTrace();
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
//        http://luckylcy.oss-cn-hangzhou.aliyuncs.com/2022/6/10/08e69a25ebb74fdcbf165f63730286b8yl.png
        String url = "http://" + bucketName + "." + endpoint + "/" + objectName;
        return url;
    }
}
package com.lcy.util;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class CommonResult {
    private Integer code;
    private String message;
    private Object data;
}

        (3)设计Controller

package com.lcy.controller;

import com.lcy.entity.User;
import com.lcy.util.CommonResult;
import com.lcy.util.OSSUtil;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;


@RestController
public class UserController {

    @RequestMapping("uploadAvatar")
    @ResponseBody
    public CommonResult uploadAvatar(MultipartFile file){
        try {
            String filePath = OSSUtil.upload(file);
            return new CommonResult(2000, "头像上传成功", filePath);
        }catch (Exception e){
            e.printStackTrace();
        }
        return new CommonResult(2000, "头像上传失败", null);
    }
}

        此时,文件已经可以上传了并进行回显了。

         (4)增加User实体类,用来封装前台传来的数据

package com.lcy.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.util.Date;


@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String imgUrl;
    private String name;
    private String address;
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date date;
}

        (5)在设计User添加的Controller类

@RequestMapping("addUser")
    public CommonResult addUser(@RequestBody User user){
        //接收到前台传来的数据后,应该通过service对数据库进行增加,再次不做处理,仅仅打印出信息
        System.out.println(user);
        return new CommonResult(2000, "添加用户成功", null);
    }

        (6)测试

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

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

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