首页 > 编程语言 >JavaWeb:文件上传2

JavaWeb:文件上传2

时间:2024-11-10 18:15:37浏览次数:3  
标签:文件 JavaWeb url OSS 阿里 上传 String

欢迎来到“雪碧聊技术”CSDN博客!

在这里,您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者,还是具有一定经验的开发者,相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导,我将不断探索Java的深邃世界,分享最新的技术动态、实战经验以及项目心得。

让我们一同在Java的广阔天地中遨游,携手提升技术能力,共创美好未来!感谢您的关注与支持,期待在“雪碧聊技术”与您共同成长!

目录

一、阿里云OSS

1、什么是阿里云?

2、什么是阿里云OSS?

3、使用第三方服务的通用思路

(1)准备工作

①注册阿里云(实名认证)

②充值

③开通对象存储服务(OSS)

④创建bucket(又叫存储空间,是存放文件的容器)

⑤获取AccessKey(秘钥)

4、参照官网的SDK编写入门程序

①导入依赖

②编写代码,实现文件上传

endpoint 的获取方式

accessKeyId 的获取方式

accessKeySecret的获取方式:目前无法查询了,忘了的话,就在创建一个accessKey。

bucketName 的获取方式

③运行效果

5、编写AliOssUtil工具类,在项目中使用

①该工具类的注意事项

②在项目中使用AliOssUtils工具类完成文件上传及url获取

③重启项目,查看效果

结语


一、阿里云OSS

1、什么是阿里云?

        阿里云是阿里巴巴集团旗下全球领先的云计算公司,也是国内最大的云服务提供商。

注意:“云”,可以理解为互联网;“云服务”,可以理解为通过互联网获得的服务。

2、什么是阿里云OSS?

        OSS(Object Storage Service):对象存储服务。对象指的就是文件。

        是由阿里云提供的。

        通过OSS,我们可以通过网络随时存储和调用文本、图片、音频、视频等文件。

        有了OSS这种云服务,我们就不再需要将前端上传的文件存储到本地了,而是直接上传到阿里云上面。

3、使用第三方服务的通用思路

(1)准备工作

  • ①注册阿里云(实名认证)

        跳过。

  • ②充值

        跳过。学生不用充值,可以免费体验几个月。

  • ③开通对象存储服务(OSS)

        

        

  • ④创建bucket(又叫存储空间,是存放文件的容器)

  • ⑤获取AccessKey(秘钥)

        这个AccessKey(秘钥),是为了证明你是阿里云OSS的合法用户。以后从后端往阿里云OSS上传文件时,需要用到这个AccessKey。

        

4、参照官网的SDK编写入门程序

①导入依赖

由于我们用的是JDK17,因此需要额外导入下面那几个依赖。

        <!--阿里云oss依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.17.4</version>
        </dependency>
        <!--阿里云OSSjdk9以上版本所需要的额外依赖-->
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.1</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>2.3.3</version>
        </dependency>

②编写代码,实现文件上传

public class OSSTest01 {
    public static void main(String[] args) throws Exception {
        //必须的四大参数
        String endpoint = "https://oss-cn-beijing.aliyuncs.com";
        String accessKeyId = "你自己的accessKeyId ";
        String accessKeySecret = "你自己的accessKeySecret ";
        String bucketName = "你自己的bucket(存放文件的容器)";


        String objectName = "new01.gif";//将文件存入OSS时的名称
        String filePath = "C:\\Users\\jhj15\\Pictures\\new01.gif";//本地文件的路径

        //创建OSSClient实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        try{
            InputStream inputStream = new FileInputStream(filePath);
            ossClient.putObject(bucketName, objectName, inputStream);
        }catch (OSSException oe){
            System.out.println("Caught an OSSException,which means your request made it to OSS, "
                    +"but was rejected with an error response for some reason.");
            System.out.println("Error Message:"+oe.getErrorMessage());
            System.out.println("Error Code:"+oe.getErrorCode());
            System.out.println("Request ID:"+oe.getRequestId());
            System.out.println("Host ID:"+oe.getHostId());
        }catch (ClientException ce){
            System.out.println("Caught an ClientException, which means the client encountered "
                    +"a serious internal problem while trying to communicate with OSS, "
                    +"such as not being able to access the network.");
            System.out.println("Error Message:"+ce.getMessage());
        }finally {
            if(ossClient != null){
                ossClient.shutdown();
            }
        }
    }
}
  • endpoint 的获取方式

  • accessKeyId 的获取方式

  • accessKeySecret的获取方式:目前无法查询了,忘了的话,就在创建一个accessKey。
  • bucketName 的获取方式

③运行效果

5、编写AliOssUtil工具类,在项目中使用

package com.example.yyzxproject.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;

/**
 * 阿里云 OSS 工具类
 */
@Component //将该工具类交给spring的IOC容器管理,使用时直接注入即可
public class AliOSSUtils {

    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";//这是北京,根据自己的来
    private String accessKeyId = "你自己的ID";
    private String accessKeySecret = "你自己的Secret";
    private String bucketName = "你自己的bucket";

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        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的路径返回
    }

}

①该工具类的注意事项

  • 加了@Component注解,交给了Spring容器管理,使用时直接注入即可。

  • 形参只需要传入controller层接收到的MultipartFile对象即可。

  • 该工具类的方法中,会自动拼接存入图片的url路径并返回出来。

②在项目中使用AliOssUtils工具类完成文件上传及url获取

@Slf4j
@RestController
public class UploadController {
    @Autowired
    private AliOSSUtils aliOSSUtils;

    @PostMapping("/upload")
    public ResultVo upload(MultipartFile image) throws IOException {
        log.info("文件上传,文件名:{}",image.getOriginalFilename());
        //调用阿里云OSS工具类进行文件上传
        String url = aliOSSUtils.upload(image);
        log.info("文件上传完成,文件访问的url:{}",url);
        return new ResultVo ("200", url);
    }

}

③重启项目,查看效果

使用Postman发送一个Post请求,参数是一张图片。

结语

以上就是文件上传的全部内容,以后项目中需要用到文件上传这个功能,直接复制上面的AliOssUtils工具类使用即可。

标签:文件,JavaWeb,url,OSS,阿里,上传,String
From: https://blog.csdn.net/qq_63981644/article/details/143660611

相关文章

  • 文件加锁
    文件加锁对文件加锁是为了避免,多个进程或线程这种并发情况下,对同一个文件进行修改时造成的混乱比如说进程A修改了文件的内容,进程B也修改了文件的内容,并且覆盖了A写的内容,然么进程A读取的内容就和预想的不同了,从而造成了混乱对文件加锁就和信号量这些同步技术类似,只不过它是专门......
  • 10-文件包含、CSRF、SSRF相关练习
    1、文件包含(1)DVWA环境下去包含其他目录的任意3个文件,要求使用相对路径../../../../../(输入多个../返回系统根目录),包含账户信息文件:/etc/passwd包含账户组信息文件:/etc/group包含磁盘配置文件:/etc/fstab(2)远程文件包含使用DVWA的文件包含漏洞包含Upload-......
  • 11.10 javaweb day3 表格,表单标签
    表格标签:定义表格整体,可以包裹多个,1.border:表格边框的宽度2.width:规定表格的宽度3.cellspacing:规定单元之间的空间:表格的行,可以包裹多个:单元格,表头单元格可以换成<body><tableborder="3px"cellspacing="2"width="600px"><tr><th>序号</th>......
  • %windir% 是一个环境变量,它指向当前操作系统中 Windows 安装目录的路径。它常用于批处
    %windir%是一个环境变量,它指向当前操作系统中Windows安装目录的路径。它常用于批处理文件、命令行或者脚本中,帮助系统或用户快速定位Windows系统文件夹的路径。类似的环境变量还有很多,它们通常用于在操作系统中快速访问重要的文件夹和目录,避免硬编码路径,从而提高脚本的可移植......
  • 【python】路径与文件管理:pathlib库的现代用法
    【Python】路径与文件管理:pathlib库的现代用法在日常的Python开发中,文件和路径管理是一个常见的任务。无论是读取文件,创建目录,还是获取文件属性,都涉及到路径操作。在Python的早期版本中,我们使用os和os.path模块来处理路径,但这些方法往往显得冗长且不够直观。为了......
  • 同一个头文件既可以用于编译 DLL,也可以用于链接到 DLL 的客户端代码
    利用条件编译(#ifdefALGLIB_EXPORTS)和DLLAPI宏的设置,可以让同一个头文件既适用于DLL库的编译,也适用于依赖该DLL的客户端代码。具体来说:在编译DLL时:头文件中的DLLAPI通过条件编译定义为__declspec(dllexport),标记这些函数是要被DLL导出的。这意味着,当编译......
  • Dw修改网站首页 上传后没变化,如何解决Dreamweaver修改网站首页后上传没变化的问题
    如果在使用Dreamweaver修改网站首页后上传没有变化,可以通过以下步骤进行排查和解决:检查文件路径:确保你修改的文件路径正确。在Dreamweaver中,打开文件管理器,确认文件路径与服务器上的路径一致。备份现有文件:在开始修改之前,确保备份当前的首页文件,可以在本地硬盘或云端存......
  • 使用configparser 读 or 写 配置文件
    config.ini文件[config]username=2024222222password=123456time=202320241num1=1id1=018819num2=1id_1=018818读取配置文件defread_ini():file='config.ini'con=configparser.ConfigParser()con.read(file,encoding='u......
  • 在Windows中,使用批处理(.bat)文件可以通过调用命令来实现自动拨号连接。以下是通过批处
    在Windows中,使用批处理(.bat)文件可以通过调用命令来实现自动拨号连接。以下是通过批处理文件实现PPPoE(拨号)连接的基本步骤:步骤1:配置拨号连接(PPPoE)在Windows中,你首先需要设置一个PPPoE拨号连接。以下是设置步骤:打开网络连接设置:点击开始菜单,输入“网络和共享中心”并打开......
  • java-文件分割
    packagesplit;importjava.io.BufferedOutputStream;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.RandomAccessFile;importjava.io.File;publicclassSplit{publicstaticvoidmain(String[]args)throwsIOException{......