java项目中上传图片到SM.MS图床


前言

在项目中,我们经常会遇到上传图片的的需求,然而将图片上传到本地服务器上会占用服务器资源。这个时候,我们就需要有一个地方能代替本地服务器存放图片了,那当然是别人的服务器(也就是远端图床)了!!这多是一件美事啊~

这里我推荐一款图床SM.MS,这一款图床,注册完之后,会赠送5GB的容量,这已经完全满足我的日常的需要了,不够也可以购买。


如何在java项目中上传图片到SM.MS?

1.看一下我的环境:

  • tomcat 8.5
  • jdk 1.8
    其实我觉得环境应该没有太大的问题哈,springboot项目中应该也是通用的

2.引入pom文件

	<!--smms图片上传-->
    <dependency>
      <groupId>com.konghq</groupId>
      <artifactId>unirest-java</artifactId>
      <version>3.13.2</version>
    </dependency>

3.获取token

(1)登录SM.MS网站

点击Dashboard
在这里插入图片描述

(2)获取Token

如下步骤:
在这里插入图片描述

4.图片上传接口编写

	@ApiOperation(value = "上传文章图片接口")
    @PostMapping("/upload")
    @ResponseBody
    public Result fileUpload(
    	@RequestParam(value = "imageFile") MultipartFile imageFile,
     	HttpServletResponse response) {
        response.setHeader("Access-Control-Allow-Origin", "*");
        // 主图的项目路径
        String paFileName = imageFile.getOriginalFilename();
        FileOutputStream stream = null;
        File file = null;
        try {
            byte[] bytes = imageFile.getBytes();
            //自定义文件名
            String filename = UUID.randomUUID().toString().replace("-", "");
            file = new File(filename+paFileName);
            if (!file.exists()){
            //创建文件
                file.createNewFile();
                stream = new FileOutputStream(file.getAbsoluteFile());
                stream.write(bytes);
            }
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            try {
                stream.close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
		//这里是向SM.MS服务器发送上传图片请求
        HttpResponse<String> response1 = Unirest.post("https://smms.app/api/v2/upload")
        		//这里*****是指上一步获取的token
                .header("Authorization", "*******************")
                .field("smfile", file)
                .asString();
        JSONObject jsonObject = JSONObject.parseObject(response1.getBody());
        //把本地创建的文件删除,不占用本地资源
        file.delete();
        //imageUrl存放上传图片的地址,方便返回前端
        String imageUrl = null;
        //当上传的图片重复时
        if (jsonObject.getString("code").equals("image_repeated")){
            imageUrl=jsonObject.getString("images");
        }
        else {
            imageUrl= JSONObject.parseObject(jsonObject.getString("data")).getString("url");
        }
        if (imageUrl!=null){
            return Result.build(imageUrl, ResultCodeEnum.SUCCESS);
        }else return Result.build(imageUrl,ResultCodeEnum.FAIL);
    }

在接口中,我们接收前端发送过来的文件类型的参数,并本地创建该文件资源,再发送请求到SM.MS服务器,上传图片。可以通过getBody()方法获取响应体中的内容拿到上传的图片的url地址,再将数据包装返回前端。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Gunalaer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值