SpringBoot后端接收Axios上传的文件

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

很多时候,我们项目开发的过程中,难免会遇到文件上传的需求

对于SpringBoot项目,我们该如何编写一个文件上传的接口呢?

这里我用的是阿里云OSS云服务器来作为上传文件的存储仓库,比起存储在电脑本地,云服务器更加便于管理、性能更好并且更加安全,值得我们选择。

好消息是我们可以免费试用!这里我们可以作为学习来使用

下面给出阿里OSS平台官网:

https://oss.console.aliyun.comhttps://oss.console.aliyun.com

1、后端的文件接收逻辑

SpringBoot提供了MultipartFile这么一个类对象,我们可以借助于这个类对象在controller方法参数中封装前端提交过来的文件对象

具体代码如下图所示:

SpringBoot后端接收Axios上传的文件,后端,Axios,SpringBoot,spring boot,后端,java,服务器,spring,ajax,javascript

这里我们要注意的一点是:在上传文件的过程中,不排除会出现上传了相同名称的文件的情况。

所以为了防止出现文件重名从而导致原有的文件被覆盖,我们可以用UUID串来给文件取名

具体操作:

用UUID生成的随机字符串,拼接上获取的源文件名中的后缀名,作为上传后的文件名。

AliOssUtil.uploadFile()方法返回的是刚刚上传图片的访问地址。

AliOssUtil是我们自定义封装的工具类,便于后期整个项目的复用。

下面我们看看AliOssUtil类中对应的代码:

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.Bucket;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.ByteArrayInputStream;
import java.io.InputStream;

public class AliOssUtil {
    // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
    private static final String ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
    private static final String ACCESS_KEY_ID="OSS秘钥ID";
    private static final String ACCESS_KEY_SECRET="OSS秘钥";
    // 填写Bucket名称,例如examplebucket。
    private static final String BUCKET_NAME = "examplebucket";
    /**
     *
     * @param objectName
     * @param in
     * @return  文件上传成功,返回访问地址
     * @throws Exception
     */
    public static String uploadFile(String objectName, InputStream in) throws Exception {
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(ENDPOINT, ACCESS_KEY_ID,ACCESS_KEY_SECRET);
        String url="";
        try {
            // 填写字符串。
            String content = "Hello OSS,你好世界";

            // 创建PutObjectRequest对象。
            PutObjectRequest putObjectRequest = new PutObjectRequest(BUCKET_NAME, objectName, in);

            // 上传字符串。
            PutObjectResult result = ossClient.putObject(putObjectRequest);

            //url组成:https://bucket名称.区城节点/objectName
            url="https://"+ BUCKET_NAME+"."+ENDPOINT.substring(ENDPOINT.lastIndexOf("/")+1)+"/"+objectName;
        } 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();
            }
        }
        return url;
    }
}

详细请参考如下文档地址:

https://help.aliyun.com/zh/oss/developer-reference/simple-upload-11?spm=a2c4g.11186623.0.0.665f5c71boZCXihttps://help.aliyun.com/zh/oss/developer-reference/simple-upload-11?spm=a2c4g.11186623.0.0.665f5c71boZCXi

2、前端对应的Axios代码

import axios from 'axios'

const baseURL='http://127.0.0.1:8080';

const instance = axios.create({
  baseURL,
  //基础地址,超时时间
  timeout:10000,
})

export const userLoadAvatarService=(file)=>instance.post('/upload',file,{headers: {'Content-Type': 'multipart/form-data'}})

        当前端用户选择好文件并点击上传之后,浏览器就会调用我们封装好的userLoadAvatarSer方法,方法中的file参数是用户上传的文件对象,此时发送的Post请求会携带这个文件对象上传到后端。

注意 : 在使用axios实例中的post方法时,一定要在第三个参数位置加上下面的内容,不然后端会出现空指针异常

{headers: {'Content-Type': 'multipart/form-data'}}

 好了,今天分享到这里结束了

至此希望能够给你带来帮助(#^.^#)

SpringBoot后端接收Axios上传的文件,后端,Axios,SpringBoot,spring boot,后端,java,服务器,spring,ajax,javascript文章来源地址https://www.toymoban.com/news/detail-835173.html

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

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

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

相关文章

  • FormData异步发送文件,后端SpringBoot接收

    平时我们用表单提交数据时,所有的数据都是以键值对的形式提交给后端的,对于文件二进制流数据也是以键值对提交的,只是说此时值的内容是二进制数据罢了。如果我们想给后端上传文件,一般都是利用表单里的File控件去提交的,但这时候有一个问题,这种上传方式不是

    2024年02月15日
    浏览(45)
  • Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录

    spring-boot的项目,虽然它自己定义了一个静态文件的存储目录,但是这个目录一般是作为前端静态文件的目录来作为使用的。如果使用这个静态目录来作为我们上传文件的目录会有一个比较尴尬的地方:将spring-boot打包成为jar包后,随着上传图片的增多,这个jar包也会跟着变大

    2024年02月16日
    浏览(55)
  • SpringBoot文件上传同时,接收复杂参数

    目录 环境信息 问题描述 错误分析 解决方法 简单参数 总结         Spring Boot:2.0.8.RELEASE         Spring Boot内置的tomcat:tomcat-embed-core 8.5.37         收到文件上传的开发工作,要求能适配各种场景,并且各场景的请求参数不一样,因此接收的参数不能是固定的几个字段

    2024年02月09日
    浏览(44)
  • JAVA面试题分享五百一十一:Spring Boot基于WebUploader实现超大文件上传和断点续传

    目录 前言 目标 实现思路 大文件分片 合并分片 断点续传 代码实现 1、webuploader组件中,分片上传怎么开启? 2、webuploader组件中,文件的md5值如何计算? 3、webuploader组件中,分片文件的md5值如何计算? 4、webuploader组件中,分片上传的的请求在哪里触发? 5、前端、后端如何校

    2024年02月19日
    浏览(59)
  • 前端上传文件夹或文件至后端(SpringBoot)

    前端上传文件夹使用的是 input 标签的file属性,最重要的是 webkitdirectory 这个属性,有了这个属性之后input才可以选择文件夹,但也只能选择文件夹了。 在webkitdirectory的官方文档里有对该属性的说明。 我们可以在这基础上做延伸,做一个表单来上传文件夹: form要加上 enctype=“

    2024年02月05日
    浏览(55)
  • spring boot文件上传

    文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。 文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。 前端代码: 后端代码: 对于阿里云的oss的使用可阅读对象存储 OSS官方文档 导入依赖

    2024年02月08日
    浏览(48)
  • @PathVariable、@PathParam、@RequestBody接收axios传递的请求参数;后端接收前端传递过来的参数

    目录 一、前言 :Content-Type 类型    (1)、 application/x-www-form-urlencoded 类型 (2)、application/json 类型 二、@PathVariable 二、@PathParam  三、@RequestBody  四、后端发送数据给前端 五、注意事项         请求参数以key-value的形式传输         请求参数以JOSN串的形式传输         ax

    2024年01月18日
    浏览(46)
  • 因为axios请求后端,接收不到token的问引出的问题

    相关概念 什么是跨域? 跨域指的是在浏览器环境下,当发起请求的域(或者网站)与请求的资源所在的域之间存在协议、主机或端口中的任何一个条件不同的情况。换句话说,只要协议、主机或端口中有一个不同,就会被认为是跨域请求。 具体来说,以下情况都属于跨域请

    2024年02月10日
    浏览(42)
  • Spring Boot 实现多文件上传

    代码结构: Controller层 跨域拦截器配置 application.properties 配置 前端页面 效果展示 获取图片的url并且读取图片 修改tomcat的server.xml文件 加上下面这句

    2023年04月08日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包