使用Java实现上传图片到七牛云

news2024/11/28 11:49:11

文章目录

  • 1.登录七牛云官网,注册账号并登录
  • 2.在项目中导入七牛云依赖
  • 3.编写创建文件名工具类
  • 4.编写连接七牛云工具类
  • 5.编写前端请求的Controller
  • 6.上传成功

七牛云

1.登录七牛云官网,注册账号并登录

2.在项目中导入七牛云依赖

<!-- 七牛云依赖 -->
<!-- https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk -->
<dependency>
    <groupId>com.qiniu</groupId>
    <artifactId>qiniu-java-sdk</artifactId>
    <version>7.9.3</version>
</dependency>

3.编写创建文件名工具类

package com.handsome.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;

/**
 * @Author 识时务者
 * @Date 2022/03/22 19:00
 * @Version 1.0
 */
@SuppressWarnings({"all"})
public class CreateDestFileNameUtil {
    private volatile static CreateDestFileNameUtil createDestFileUtil;

    private CreateDestFileNameUtil() {
    }

    public static CreateDestFileNameUtil getCreateDestFileUtil() {
        if (createDestFileUtil == null) {
            synchronized (CreateDestFileNameUtil.class) {
                if (createDestFileUtil == null) {
                    createDestFileUtil = new CreateDestFileNameUtil();
                }
            }
        }
        return createDestFileUtil;
    }

    // 上传的七牛云的获取文件名称的方法
    public Map<String, Object> getDestFile(String fileName) {
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 生成文件名称通用方法
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HHmmss");
        Random r = new Random();
        StringBuilder tempName = new StringBuilder();
        tempName.append(sdf.format(new Date())).append(r.nextInt(100)).append(suffixName);
        String newFileName = tempName.toString();
        Map<String, Object> map = new HashMap();
        map.put("newFileName", newFileName);
        return map;
    }
}

4.编写连接七牛云工具类

package com.handsome.utils;

import com.alibaba.fastjson.JSON;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.Region;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Component;

import java.io.InputStream;

/**
 * @Author Handsome
 * @Date 2022/4/24 9:39
 * @Version 1.0
 */
@SuppressWarnings({"all"})
@Component
public class QiniuUtils {

    // 设置需要操作的账号的AK和SK
    private static final String ACCESS_KEY = "你的七牛云ACCESS_KEY";
    private static final String SECRET_KEY = "你的七牛云SECRET_KEY";

    // 密钥
    private static final Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);

    // 要上传的空间名称
    private static final String BUCKETNAME = "你的七牛云创建的空间名称";

    // 认证信息 不能使用static的upToken 会过期
//    private static final String upToken = auth.uploadToken(BUCKETNAME);

    // 外链默认域名
    public static final String DOMAIN = "你的七牛云外链默认域名";
    例如:http://cdn.handsomehjj.vip/handsomeforum/

    public boolean upload(InputStream file, String fileName) {

        //构造一个带指定 Region 对象的配置类
        Configuration cfg = new Configuration(Region.huanan());  //根据自己的对象空间的地址选(华南)
        //...其他参数参考类注释
        UploadManager uploadManager = new UploadManager(cfg);
        //默认不指定key的情况下,以文件内容的hash值作为文件名
        try {
            String upToken = auth.uploadToken(BUCKETNAME);
            Response response = uploadManager.put(file, "handsomeforum/" + fileName, upToken, null, null);
            // 解析上传成功的结果
//                DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
            DefaultPutRet putRet = JSON.parseObject(response.bodyString(), DefaultPutRet.class);

            // 这个returnPath是获得到的外链地址,通过这个地址可以直接打开图片
//            String returnPath = DOMAIN + putRet.key;

            return true;
        } catch (QiniuException ex) {
            Response r = ex.response;
            System.err.println(r.toString());
            try {
                System.err.println(r.bodyString());
            } catch (QiniuException ex2) {
                //ignore
            }
        }
        return false;
    }

5.编写前端请求的Controller

	// axios上传头像到七牛云
    @PostMapping("/user/upload/yourAvatar/{uid}")
    @ResponseBody
    public String uploadyourAvatar(@PathVariable String uid,
                                   HttpServletRequest httpServletRequest,
                                   @RequestParam(value = "file", required = true) MultipartFile file) throws Exception {
        String fileName = file.getOriginalFilename();
        if (fileName.isEmpty()) {
            Map datamap = new HashMap<>();
            datamap.put("code", 555);
            datamap.put("msg", "未上传图片!");
            String jasonmap = JSONObject.toJSONString(datamap);
            return jasonmap;
        }

        // 获取destFile和newFileName
        CreateDestFileNameUtil createDestFileUtil = CreateDestFileNameUtil.getCreateDestFileUtil();
        Map<String, Object> map = createDestFileUtil.getDestFile(fileName);
        String newFileName = (String) map.get("newFileName");

// 使用七牛云工具列上传图片
        boolean upload = qiniuUtils.upload(file.getInputStream(), newFileName);
        if (upload) {
            // 头像图片地址
            String yourAvatar = QiniuUtils.DOMAIN + newFileName;
            Map datamap = new HashMap<>();
            datamap.put("code", 200);
            datamap.put("msg", "头像上传成功!请重新登录!");
            String jasonmap = JSONObject.toJSONString(datamap);
            return jasonmap;
        } else {
            Map datamap = new HashMap<>();
            datamap.put("code", 555);
            datamap.put("msg", "图片上传失败!");
            String jasonmap = JSONObject.toJSONString(datamap);
            return jasonmap;
        }
    }

6.上传成功

成功上传到七牛云后获取到图片的地址,保存到数据库,前端获取数据库中的图片地址即可访问七牛云中的图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/85538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

力扣1832.判断句子是否为全字母句(cpp实现+解析)

文章目录1832.判断句子是否为全字母句解法一解法二解法三&#xff08;最优&#xff09;1832.判断句子是否为全字母句 难度&#xff1a;简单 力扣传送门&#xff1a; https://leetcode.cn/problems/check-if-the-sentence-is-pangram/description/ 题目要求&#xff1a; 全字…

Compose学习 -> Image()

基本使用&#xff1a; 通过资源id加载资源文件 Image(painter painterResource(id R.mipmap.test_01),contentDescription "这是内容描述") 通过url地址加载网络图片 1、引入第三方库&#xff0c;并添加网络权限 implementation ("io.coil-kt:coil-comp…

【深入浅出Nacos原理及调优】「原理分析专题」配置中心加载原理和配置实时更新原理分析

官方资源 官方资源 带着问题去思考 客户端长轮询的响应时间会受什么影响为什么更改了配置信息后客户端会立即得到响应客户端的超时时间为什么要设置为30s带着以上这些问题我们从服务端的代码中去探寻结论。 配置中心 (Configuration Center) 系统开发过程中通常会将一些需…

用Python调用OpenAI API做有趣的事

获取 API KEY 首先需要 可以开全局的梯子&#xff0c;选择日本或韩国节点&#xff0c;可以通过 ipinfo 检查当前 IP 地址是否为日本或韩国地区&#xff0c;然后访问 OpenAI 网站注册账号并完成认证。 如果自己完成账号认证的成本太高&#xff0c;可以在某宝直接购买一个已经通…

存储也能“一键美颜”?看 XOCP 如何助力互联科技图片业务转型

近日&#xff0c;XSKY星辰天合联合“互联科技”推出了“图片云在线处理”解决方案&#xff0c;提供海量图片高效存储访问和在线图片处理服务&#xff0c;深入业务场景简化操作流程&#xff0c;提升照片流转速度&#xff0c;为客户打造高效敏捷的拍照体验。互联科技&#xff08;…

DAS Over FC 技术允许 ATTO 分解存储并完成 vSAN 认证套件

一、介绍 最近&#xff0c;ATTO Technology, Inc. 以前所未有的方式 完成了 VMware vSAN ReadyNode 认证套件。 测试台本身是公式化的&#xff0c;以三台 Dell R640 服务器作为主机。 除了用于引导的 SD 卡和用于日志记录的单个 SAS SSD 之外&#xff0c;不存在任何内部存储…

EXCEL基础:IFNA、VLOOKUP、SUMIFS函数的使用

注意&#xff1a;本操作数据来源于excel home&#xff0c;特此声明。 查看原始数据&#xff0c;如下所示为【商品】的相关信息&#xff1a; 查看原始数据&#xff0c;如下所示为【供应商】的相关信息&#xff1a; 主要目的&#xff1a;把以上相关信息搞在一张表上。 把下表…

基于jsp+mysql+ssm台球俱乐部管理系统-计算机毕业设计

项目介绍 台球俱乐部系统设计主要是管理员登录后对整个系统相关操作进行处理&#xff0c;可进行管理员的添加和删除&#xff0c;会员信息管理、付费信息管理、球桌信息管理、订桌信息管理等操作管理。采用目前最流行的ssm框架和eclipse编辑器、mysql数据库设计并实现的 本系统…

[附源码]计算机毕业设计冬奥会网上商城Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

什么是BPM系统?BPM流程管理系统介绍

一、什么是BPM系统&#xff1f; BPM系统&#xff08;英文全称&#xff1a;Business Process Management&#xff0c;翻译后简称BPM&#xff09;即业务流程管理系统&#xff0c;是指对端到端业务流程进行建模、分析和优化&#xff0c;以实现战略业务目标&#xff0c;其特点是注…

Elasticsearch:如何在 CentOS 上创建多节点的 Elasticsearch 集群 - 8.x

在我之前的文章 “Elasticsearch&#xff1a;使用 RPM 安装包来安装 Elastic Stack 8.x” 里&#xff0c;我详细地介绍了如何使用 RPM 安装包来安装 Elastic Stack 8.x。在今天的文章中&#xff0c;我来详细描述如何从零开始来创建一个含有三个节点的 Elasticsearch 集群。我们…

python文本处理尝试

Python文本处理尝试 最近打算看CSAPP&#xff0c;GitHub上看到有英语字幕ass源文件&#xff0c;想把字幕提取出来提高学习效率&#xff0c;先把ass文件转成txt文件&#xff0c;发现是这样&#x1f447; 都在Dialogue的后面&#xff0c;打算尝试提取一下 不太熟练&#xff0c;下…

解决 Eclipse 中不见 Maven 问题

在 Windows -> Preferences 不见 Maven 和 File -> New -> Project 均不见 Maven&#xff0c;但 Help -> Eclipse Marketplace -> installed 却可见已经安装&#xff0c;网上的各种方法都不能解决。 解决步骤&#xff1a; 关闭 Eclipse&#xff1b;清空目录 C:…

肿瘤网络平台

肿瘤网络平台是为广大肿瘤医生量身定做的学习&#xff0c;交流功能健全的网络平台&#xff0c;平台汇聚了会议、病例、专家讲堂等内容&#xff0c;广大的肿瘤医生可以随时分享、讨论专业知识。 一、平台价值 让医生 了解肿瘤前沿进展 提高业务水平 丰富临床经验 二、平台架构…

如何挖掘外贸客户需求

是客户的衣食父母。 俗话说“知己知彼&#xff0c;百战不殆”&#xff0c;外贸业务员都想把自己的产品推销给客户。除了知道自己产品的特点&#xff0c;还应该知道客户的需求是什么。因此&#xff0c;前期的客户调研工作非常重要。 不是所有的客户都是意向或潜在客户。只有当…

小程序canvas 缩放/拖动/还原/封装和实例--开箱即用

小程序canvas 缩放/拖动/还原/封装和实例一、预览二、使用2.1 创建和配置方法三、源码3.1 实例组件3.2 核心类一、预览 之前写过web端的canvas 缩放/拖动/还原/封装和实例。最近小程序也需要用到&#xff0c;但凡是涉及小程序canvas还是比较多坑的&#xff0c;而且难用多了&am…

[附源码]Node.js计算机毕业设计订餐系统Express

项目运行 环境配置&#xff1a; Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境&#xff1a;最好是Nodejs最新版&#xff0c;我…

Linux中如何查看ntp是否同步?

Linux中如何查看ntp是否同步?在Linux中&#xff0c;查看ntp是否同步的方法主要有三种&#xff0c;分别是&#xff1a;ntpd命令、ntpstat命令、timedatectl命令&#xff0c;接下来是详细的内容介绍。  NTP用于将计算机客户或服务器的时间同步到另一服务器或参考时钟源。它使用…

Java基于微信小程序的计算机等级考试考练 毕业设计

网络的广泛应用给生活带来了十分的便利。所以把计算机等级考试考练与现在网络相结合&#xff0c;利用java技术建设计算机等级考试考练APP&#xff0c;实现计算机等级考试考练的信息化。则对于进一步提高计算机等级考试考练发展&#xff0c;丰富计算机等级考试考练经验能起到不少…

[附源码]Python计算机毕业设计电商后台系统Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等…