使用(七牛云)为例子实现将文件上传到云服务器

news2024/9/24 19:17:04

目的

目前,用户的头像、分享生成的长图等文件都是存放在本地的,我们可以将他们存放在云服务器中,此处我们使用七牛云作为例子示范。

七牛云

创建账户并申请如下的两个bucket,分别是用户头像的存储空间和分享长图的存储空间。
在这里插入图片描述

导入依赖

		<!-- https://mvnrepository.com/artifact/com.qiniu/qiniu-java-sdk -->
		<dependency>
			<groupId>com.qiniu</groupId>
			<artifactId>qiniu-java-sdk</artifactId>
			<version>7.13.1</version>
		</dependency>

配置

# qiniu
qiniu.key.accessKey=
qiniu.key.secretKey=
qiniu.bucket.header.name=coderforum-header
qiniu.bucket.header.url=
qiniu.bucket.share.name=coderforum-share
qiniu.bucket.share.url=

Controller

@Controller
@RequestMapping("/user")
public class UserController implements CommunityConstant {

    private static Logger logger = LoggerFactory.getLogger(UserController.class);

    @Value("${qiniu.key.accessKey}")
    private String accessKey;

    @Value("${qiniu.key.secretKey}")
    private String secretKey;

    @Value("${qiniu.bucket.header.name}")
    private String headerBucketName;

    @Value("${qiniu.bucket.header.url}")
    private String headerBucketUrl;

    @LoginRequired
    @RequestMapping(path = "/setting", method = RequestMethod.GET)
    public String getSettingPage(Model model) {
        // set the name of the uploaded file
        String fileName = CommunityUtil.generateUUID();

        // set the information of the response
        StringMap policy = new StringMap();
        policy.put("returnBody", CommunityUtil.getJSONString(0));

        // generate the certificate of uploading
        Auth auth = Auth.create(accessKey, secretKey);
        String uploadToken = auth.uploadToken(headerBucketName, fileName, 3600, policy);

        model.addAttribute("uploadToken", uploadToken);
        model.addAttribute("fileName", fileName);

        return "/site/setting";
    }

    // update the path of profile picture
    @PostMapping(path = "/header/url")
    @ResponseBody
    public String updateHeaderUrl(String fileName){
        if(StringUtils.isBlank(fileName)){
            return CommunityUtil.getJSONString(1, "The file name cane is required.");
        }

        String url = headerBucketUrl + "/" + fileName;
        userService.updateHeader(hostHolder.getUser().getId(), url);

        return CommunityUtil.getJSONString(0);
    }
}

前端

<!--				上传到云服务器(七牛云)-->
				<form class="mt-5" id="uploadForm">
					<div class="form-group row mt-4">
						<label for="head-image" class="col-sm-2 col-form-label text-right">choose a photo:</label>
						<div class="col-sm-10">
							<div class="custom-file">
								<input type="hidden" name="token" th:value="${uploadToken}">
								<input type="hidden" name="key" th:value="${fileName}">
								<input type="file" class="custom-file-input" id="head-image" name="file" lang="es" required="">
								<label class="custom-file-label" for="head-image" data-browse="文件">select a photo</label>
								<div class="invalid-feedback">
									This account does not exist!
								</div>
							</div>
						</div>
					</div>
					<div class="form-group row mt-4">
						<div class="col-sm-2"></div>
						<div class="col-sm-10 text-center">
							<button type="submit" class="btn btn-info text-white form-control">upload</button>
						</div>
					</div>
				</form>


	<script th:src="@{/js/setting.js}"></script>

相应的js文件:

$(function(){
    $("#uploadForm").submit(upload);
});

function upload() {
    $.ajax({
        url: "https://upload-z1.qiniup.com",
        method: "post",
        processData: false,
        contentType: false,
        data: new FormData($("#uploadForm")[0]),
        success: function(data) {
            if(data && data.code == 0) {
                // 更新头像访问路径
                $.post(
                    CONTEXT_PATH + "/user/header/url",
                    {"fileName":$("input[name='key']").val()},
                    function(data) {
                        data = $.parseJSON(data);
                        if(data.code == 0) {
                            window.location.reload();
                        } else {
                            alert(data.msg);
                        }
                    }
                );
            } else {
                alert("Upload failed!");
            }
        }
    });
    return false;
}

查看

文件已经存入七牛云
在这里插入图片描述

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

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

相关文章

浅谈电能计量管理系统在煤矿上的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;随着煤矿供电系统管、控一体化的发展需要&#xff0c;本文提出了一种基于矿井光纤网络构成的煤矿电参数计量系统&#xff0c;该系统具有实现变电所各类开关、动力设备的用电高精度计量&#xff1b;远程实时监…

Linux命令grep的使用方法大全

常用总结&#xff1a; 1.在当前路径下搜索&#xff1a; grep "whetherInCommon" ./* -n执行效果参考&#xff1a; 说明&#xff1a;这里我指定在当前路径下搜索关键字&#xff1a; “whetherInCommon” 并显示行号 -n&#xff08;–line-number&#xff09;&…

Bytebase 2.7.0 - ​新增分支(Branching)功能

&#x1f680; 新功能 新增支持与 Git 类似的分支&#xff08;Branching&#xff09;功能来管理 schema 变更。支持搜索所有历史工单。支持导出审计日志。 &#x1f384; 改进 变更数据库工单详情页面全新改版。优化工单搜索体验。SQL 审核规则支持针对不同数据库进行独立配…

gdb 快速上手(附带测试案例)

在终端使用 gdb 对程序进行调试比较复杂&#xff0c;本文旨在帮助小白快速上手 gdb &#xff0c;所以只介绍了一些比较重要的命令&#xff01; 案例代码在文末&#xff01; 一、gdb 调试 1、编译源文件 gcc -g test.c -o test 2、启动程序 gdb ./test 结果如下&#xff1a;…

Fortinet独揽OT领导者称号丨Westlands 《Navigator工业网络安全展望报告》发布

专注推动网络与安全融合的全球网络安全领导者Fortinet&#xff08;NASDAQ: FTNT&#xff09;近日宣布&#xff0c;业内领先的OT安全行业分析和战略公司Westlands Advisory&#xff08;威士兰咨询&#xff0c;以下简称WA&#xff09;&#xff0c;在最新发布的《工业网络安全展望…

pandas|判断是否包含|contains|isin

文章目录 1. 方法简介1.1 pandas.Series.str.contains1.2 pandas.DataFrame.isin 2. 示例13. 示例24. 相关文章(1) pandas分组聚合|agg|transform|apply(2) 缺省值判断 pd.isnull, pd.isna, pd.notna, pd.notnull, np.isnan, math.isnan 区别(3) pandas中DataFrame字典互转(4) …

初识Java 4-1 初始化与清理

目录 通过构造器进行初始化 无参构造器 方法的重载 使用基本类型的重载 this关键字 在构造器中调用构造器 static的含义 成员初始化 初始化顺序 静态数据的初始化 显式的静态初始化&#xff08;静态块&#xff09; 非静态实例的初始化 数组初始化 动态数组的创建 …

kubernetes进阶 (一) 环境搭建

我是基于一台centos7.6的腾讯云主机进行操作的&#xff0c;配置为4C8G&#xff0c;之前的文档自己试着搭建发现有问题了&#xff0c;这里重新整理下笔记&#xff0c;集群版本选择1.22.2&#xff08;一年前搭的&#xff09;用的还不错 清理环境 之前我的环境可能装过docker或者什…

WIFI与BT的PCB布局布线注意事项

1、模块整体布局时&#xff0c;WIFI模组要尽量远离DDR、HDMI、USB、LCD电路以及喇叭等易干扰模块或连接座&#xff1b; 2、晶体电路布局需要优先考虑&#xff0c;布局时应与芯片在同一层并尽量靠近放置以避免打过孔&#xff0c;晶体走线尽可能的短&#xff0c;远离干扰源&…

【附安装包】EViews 12.0安装教程

---------------------------END--------------------------- 题外话 当下这个大数据时代不掌握一门编程语言怎么跟的上脚本呢&#xff1f;当下最火的编程语言Python前景一片光明&#xff01;如果你也想跟上时代提升自己那么请看一下. 感兴趣的小伙伴&#xff0c;赠送全套Pyt…

Vue框架--理解MVVM

我们知道&#xff0c;MVVM是Model-View-ViewModel的简写。它本质上就是MVC的改进版。我们看看MVVM的模型架构&#xff0c;如下所示: 架构理解与实例

Matlab论文插图绘制模板第111期—带线标记的图

本期分享的是带线标记注释的图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋友可以关注同名公号【阿昆的科研日常】&#xff0c;后台回复关键词【绘图桶】查看加入方式。 模板中最…

Codeforces Harbour.Space Scholarship Contest 2023-2024 (Div. 1 + Div. 2)

解题情况 3of 9 A B C 日期 9.1 目录 A. Increasing and Decreasing 题目分析&#xff1a; 代码&#xff1a; B. Swap and Reverse 题目分析&#xff1a; 代码&#xff1a; C. Divisor Chain A. Increasing and Decreasing 题目分析&#xff1a; x->y递增&#xf…

keepalived 主备都存在vip, keepalived主备跨网段配置;keepalived主备服务器不在同一个网段怎么配置

keepalived 主备都有vip问题&#xff1b;主备服务器不在同一个网段怎么配置 主机&#xff1a;128.192.10.10 备机&#xff1a;128.192.11.11 备机&#xff1a;128.192.22.22 # keepalived的配置文件增加如下配置即可实现 # 主机&#xff1a;128.192.10.10 vrrp_instance VI_1 {…

【Latex】使用技能站:(三)使用 Vscode 配置 LaTeX

使用 Vscode 配置 LaTeX 引言1 安装texlive2 安装vscode2.1 插件安装2.2 配置 3 安装SumatraPdf3.1 vscode配置3.2 配置反向搜索 引言 安装texlive 安装vscode 安装SumatraPdf 1 安装texlive 在线LaTeX编辑器&#xff1a;https://www.overleaf.com TeX Live下载&#xff1a;h…

layui数据表格实现表格中嵌套表格,并且可以折叠展开

效果&#xff1a; 思路&#xff1a; 1、最外层的表格先渲染&#xff0c;在done回调中向每个tr后面插入一个用来嵌套子级表格的tr。 tr的class和table的id需要用索引 i 关联 //向每一行tr后面追加显示子table的trlet trEles $(".layui-table-view[lay-idlist] tbody tr&…

openGauss学习笔记-53 openGauss 高级特性-Ustore

文章目录 openGauss学习笔记-53 openGauss 高级特性-Ustore53.1 设计原理53.2 核心优势53.3 使用指导 openGauss学习笔记-53 openGauss 高级特性-Ustore Ustore 存储引擎&#xff0c;又名 In-place Update 存储引擎&#xff08;原地更新&#xff09;&#xff0c;是 openGauss …

Vite打包性能优化及填坑

最近在使用 Vite4.0 构建一个中型前端项目的过程中&#xff0c;遇到了一些坑&#xff0c;也做了一些项目在构建生产环境时的优化&#xff0c;在这里做一个记录&#xff0c;以便后期查阅。(完整配置在后面) 上面是dist文件夹的截图&#xff0c;里面的内容已经有30mb了&#xff…

开学季ipad手写笔什么牌子好?第三方电容笔推荐

自从ipad之类的平板电脑上出现了电容笔&#xff0c;电容笔就成功的取代了我们的手指&#xff0c;大大加快了我们的写作速度。不过&#xff0c;由于苹果pencil自带的先进芯片&#xff0c;导致其售价一直很高&#xff0c;给很多人&#xff0c;特别是学生&#xff0c;造成了很大的…

Python(Web时代)—— Django操作现有数据库表

Mysql操作 前言 在实际开发过程中&#xff0c;我们经常会遇到数据库表已经建立好了&#xff0c;现在只需要开发项目功能&#xff0c;操作已有数据库表的情况。 Django为我们提供了inspecdb的方法。他的作用即是对已经存在的数据库表来反向映射结构到models.py中. 操作 第一…