文件上传学习笔记

这篇具有很好参考价值的文章主要介绍了文件上传学习笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

笔记

文件上传

  • 文件上传是指将本地图片,视频,音频等文件上传到服务器,供其它用户浏览或下载的过程

  • 文件上传前端三要素 :

    • file表单项

    • post方式

    • multipart/from-data

  • 服务端接收文件 : 用spring中的API : MultipartFile

  • 要想文件名唯一 : 可以使用uuid技术

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

    #配置单个文件最大上传大小
    spring.servlet.multipart.max-file-size=10MB
    ​
    #配置单个请求最大上传大小(一次请求可以上传多个文件)
    spring.servlet.multipart.max-request-size=100MB
  • 文件的本地存储 :

    image.transferTo(new File("pathname"));
  • 本地存储 : 无法直接访问 , 磁盘空间限制 , 磁盘损坏

  • OSS :

    • 为每一个文件都提供了一个访问路径,可以直接访问到该文件

    • 在aliyun中存储文件;

第三方服务的通用思路:

  1. 准备工作

  2. 参照官方SDk编写入门程序

  3. 集成使用

注意 :

  • SDk :Software Development Kit的缩写,软件开发工具包,包括辅助软件开发工具包(jar包),代码示例等,都可以叫做SDk;

阿里云OSS - 使用步骤

  1. 注册阿里云(实名认证)

  2. 充值

  3. 开通对象存储服务(OSS):

    • 点击右上角的控制台。

    • 将鼠标移至左上角三条横线处,在显示界面中单击对象存储OSS。

    • 然后点击开通

  4. 创建bucket : 直接点击左上角的新建Bucket,然后其它不用改,取一个唯一的name,然后将读写权限改为公共读。

  5. 获取AccessKey : 注意保存AccessKey和Secret

  6. 参照官方SDk编写入门程序 : 点击右下角的SDk下载,然后在新出现的页面中点击SDk示例,参考官方文档照做即可,如java : copy相关语言文件上传的代码即可,如下 :

    import org.junit.jupiter.api.Test;
    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import java.io.FileInputStream;
    import java.io.InputStream;
    ​
    public class AliOssTest {
    ​
        @Test
        public void testOss(){
            // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
            String accessKeyId = "---------------------";
            String accessKeySecret = "-----------------------";
            // 填写Bucket名称,例如examplebucket。
            String bucketName = "-----------";
            // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
            String objectName = "0001.jpg";
            // 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。
            // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
            String filePath= "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\10.jpg";
    ​
            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    ​
            try {
                InputStream inputStream = new FileInputStream(filePath);
                // 创建PutObject请求。
                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 (Exception 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();
                }
            }
        }
    }

    如果jdk在9以上,除了添加

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

    还要添加 :

    <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>
            <!-- no more than 2.3.3-->
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>2.3.3</version>
            </dependency>
  7. 然后在相关代码中更改自己的相关信息(如 : endpoint , accessKeyId,accessKeySecret等);

    最后运行程序,就可以在自己的Bucket中查看到上传的文件了;

  8. 案例集成OSS :

    如在新增员工的过程中,要上传图片,那么服务器端先接收上传的图片,然后通过程序将图片用OSS来存储,然后获取OSS中存储好的文件的URl,最后返回URl给前端,然后前端自动将图片展示出来。

注意 :

  • Bucket : 存储空间是用户用于存储对象(Object,就是文件)的容器,所有对象都必须隶属于某个存储空间。

具体 :

创建一个工具类 AliOSSUtils(将相关信息更改为自己的):

package com.it.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;
​
​
@Component
public class AliOSSUtils{
​
    private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
    private String accessKeyId = "xxxxxxx";
    private String accessKeySecret = "xxxxxx";
    private String bucketName = "xxxxxxxxxx";
​
    /**
     * 实现上传图片到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的路径返回
    }
​
}

然后在该接口中直接调用工具类中的方法即可 :文章来源地址https://www.toymoban.com/news/detail-743400.html

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

到了这里,关于文件上传学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • [Java]JavaWeb学习笔记(动力节点老杜2022)【Javaweb+MVC架构模式完结】

    视频地址:动力节点最新JavaWeb视频教程,javaweb零基础入门到精通IDEA版https://www.bilibili.com/video/BV1Z3411C7NZ?p=1vd_source=93ab990b9131a1b90943874a5448830a 资料链接:https://pan.baidu.com/s/1y-Dm0dGjQQOvARFBmGiG1w?pwd=1234 提取码:1234 【Tomcat服务器版本与支持Java版本的对应关系:https://tomcat.apache.org/whi

    2023年04月09日
    浏览(248)
  • 【JavaWeb】入门一篇就够了—学习笔记整理

    ⭐⭐⭐⭐⭐⭐ Github主页👉https://github.com/A-BigTree 笔记链接👉https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以,麻烦各位看官顺手点个star~😊 如果文章对你有所帮助,可以点赞👍收藏⭐支持一下博主~😆 顺着尚硅谷的资料一路学习过来的,整理了JavaWeb基础篇的内容,

    2023年04月10日
    浏览(59)
  • JavaWeb小项目之Servlet实现用户登录(详细教程学习笔记)【IDEA工具】

    这个【Servlet实现用户登录】小项目,作为 JavaWeb小项目系列 的开篇,未来我会继续完善各个功能,直到可以真正作为一个Web项目(PS:希望这个坑可以填上,说来遗憾,现在已经大三了,人生也比较迷茫,希望可以通过考研改变自己吧。岁月蹉跎,大一学C++,大二学JavaSE的时

    2023年04月11日
    浏览(56)
  • 文件上传笔记整理

    文件上传 web渗透的核心,内网渗透的基础 通过上传webshell文件到对方的服务器来获得对方服务器的控制权 成功条件 文件成功上传到对方的服务器(躲过杀软) 知道文件上传的具体路径 上传的文件可以执行成功 文件上传的流程 前端JS对上传文件进行检测(文件类型) 服务器

    2024年01月22日
    浏览(24)
  • JavaWEB学习笔记(二)------HTTP、Servlet、会话、过滤器、监听器、Ajax、前端工程化

    目录 HTTP HTTP1.1 请求和响应的报文格式 请求报文 响应报文 常见状态响应码 Servlet  静态资源和动态资源 ​编辑  Servlet简介  Servlet开发流程 导入和响应头问题 url-pattern不同写法 url-pattern工作方式 Servlet注解方式配置 Servlet生命周期  Servlet继承结构 Servlet接口 GenerisServlet类 Ht

    2024年01月21日
    浏览(43)
  • Spring Boot 笔记 019 创建接口_文件上传

    1.1 创建阿里OSS bucket OSS Java SDK 兼容性和示例代码_对象存储(OSS)-阿里云帮助中心 (aliyun.com) 1.2 编写工具类 1.3 创建文件上传controller 1.4 postman测试

    2024年02月22日
    浏览(50)
  • Flutter笔记:关于Flutter中的大文件上传(上)

    Flutter笔记 关于Flutter中的大文件上传(上) 大文件上传背景与 Flutter 端实现文件分片传输 作者 : 李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 : 291148484@163.com 本文地址 :https://blog.csdn.net/qq_28550263/article/details/134302751 本系列上下两篇文章,包括 Flutter 端和 Django 端(后

    2024年02月03日
    浏览(53)
  • SpringBoot实现文件上传和下载笔记分享(提供Gitee源码)

    前言:这边汇总了一下目前SpringBoot项目当中常见文件上传和下载的功能,一共三种常见的下载方式和一种上传方式,特此做一个笔记分享。 目录 一、pom依赖 二、yml配置文件 三、文件下载

    2024年02月11日
    浏览(47)
  • node笔记_express结合formidable实现前后端的文件上传

    大家好,我是yma16,本期分享node

    2024年02月05日
    浏览(42)
  • 【学习笔记】上传代码到GitHub(保姆级教程)

    首先进入GitHub官网 选择右上角的 sign up 进入登录页面,等待动画加载完成出现输入Email 继续输入密码 继续下一步按照提示输入就好了 注册好账号我们可以进入下一步了 找到Git官网,进入主页,点击 Download 进入到下载页面 进入到下载页面可以看到有四个下载选择 分别是应用和便

    2024年02月08日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包