使用Gradle编译项目  传送门

  腾讯视频云点播  传送门

  项目已托管到Github上   传送门

  腾讯云点播服务之视频的显示(下)  传送门

  

  个人腾讯云控制台中的视频管理

  IndexController.java下的getSign()方法中填写自己云API秘钥 ID和AppKey[此ID和Appke作为自己项目视频文件上传地址]

  腾讯云会通过Signature类去将ID和Appkey加密得到字符串【作为自己项目视频上传地址】

  得到的字符串在qcVideo.ugcUploader.start()中getSignature:getSignature属性下作为视频文件传输位置

       //个人API密钥中的Secret Id
sign.setSecretId("AKIDkNsDQWZOYYVSHu49kDh9Uh1FSo3BsnLm");
//个人API密钥中的Secret Key
sign.setSecretKey("XDn1a3NWzN0Tp4vH3zpSp5fEXxxxxxxxx");

实现分三个模块

  (一)、使用原生JQuery获取文件

  (二)、简单上传文件(无封面提示信息) 

  (三)、上传视频及封面并增加上传提示信息

  各个功能模块的默认配置文件application.properties

#thymeleaf编码风格
spring.thymeleaf.encoding=UTF-8 #热部署静态文件
spring.thymeleaf.cache=false #使用HTML5的标签
spring.thymeleaf.model=HTML5 #使用H2控制台
spring.h2.console.enabled=true

前申:使用原生JQuery获取本地文件

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title>Gary_Video</title>
</head>
<body> <h1>Gary上传视频</h1> <from id="from1">
<input id="uploadVideoNow-file" type="file" onchange="changeInput(this)" style="display:none;"> </from> <!-- a标签,当点击之后,执行change函数中的内容 -->
<a id="uploadVideoNow" href="javascript:void(0);" onclick="change()">点击上传视频</a> <script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
function change(){
$("#uploadVideoNow-file").click();
} function changeInput(e){
alert(e.files[0].name);
} </script> </body>
</html>

video.html

package com.Gary.videodemo.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView; @RestController
public class IndexController { @RequestMapping("/")
public ModelAndView index()
{
return new ModelAndView("/video.html");
}
}

IndexController.java

    <from id="from1">
<input id="uploadVideoNow-file" type="file" onchange="changeInput(this)" style="display:none;"> </from> <!-- a标签,当点击之后,执行change函数中的内容 -->
<a id="uploadVideoNow" href="javascript:void(0);" onclick="change()">点击上传视频</a> <script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
function change(){
$("#uploadVideoNow-file").click();
} function changeInput(e){
alert(e.files[0].name);
} </script>

一、实现简单上传视频    官方文档:传送门

  当页面返回"success"提示信息时成功上传到腾讯云中!!!

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title>Gary_Video</title>
</head>
<body> <h1>Gary上传视频</h1> <from id="from1">
<input id="uploadVideoNow-file" type="file" onchange="changeInput(this)" style="display:none;"> </from> <!-- a标签,当点击之后,执行change函数中的内容 -->
<a id="uploadVideoNow" href="javascript:void(0);" onclick="change()">点击上传视频</a> <!-- 在web中引入sdk,js -->
<script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader.js"></script>
<script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" th:inline="javascript"> var getSignature = function(callback)
{
$.ajax({
url:[[@{~/sign}]],
type:"POST",
success:function(result)
{
alert(result);
//即可上传视频
callback(result);
} })
} function change()
{
$("#uploadVideoNow-file").click();
} function changeInput(e){
//alert(e.files[0].name);
var videoFile = e.files[0];
qcVideo.ugcUploader.start({
//视频文件
videoFile:videoFile,
//上传位置
getSignature:getSignature,
//是否上传声音
allowAudio:1,
//上传成功
success:function(result)
{
alert("success");
},
//上传失败
error:function(result)
{
alert("error");
},
//上传过程中
progress:function(result)
{ },
//上传完成
finish:function(result)
{
alert("finish");
}
})
} </script> </body>
</html>

video.html

package com.Gary.videodemo.controller;

import java.util.Random;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import com.Gary.videodemo.utils.Signature; @RestController
public class IndexController { @RequestMapping("/")
public ModelAndView index(){
return new ModelAndView("/video.html");
} @RequestMapping("/sign")
@ResponseBody
public String getSign()
{
//得到Sign
Signature sign = new Signature();
//个人API密钥中的Secret Id
sign.setSecretId("AKIDkNsDQWZOYYVSHu49kDh9Uh1FSo3Bxxxx");
//个人API密钥中的Secret Key
sign.setSecretKey("XDn1a3NWzN0Tp4vH3zpSp5fEX2Rqxxxx");
sign.setCurrentTime(System.currentTimeMillis() / 1000);
sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
sign.setSignValidDuration(3600 * 24 * 2); String signature = null;
try {
signature = sign.getUploadSignature();
System.out.println("signature : " + signature);
} catch (Exception e) {
System.out.print("获取签名失败");
e.printStackTrace();
} return signature;
} }

IndexController.java

package com.Gary.videodemo.utils;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Encoder; public class Signature {
private String secretId;
private String secretKey;
private long currentTime;
private int random;
private int signValidDuration; private static final String HMAC_ALGORITHM = "HmacSHA1";
private static final String CONTENT_CHARSET = "UTF-8"; public static byte[] byteMerger(byte[] byte1, byte[] byte2) {
byte[] byte3 = new byte[byte1.length + byte2.length];
System.arraycopy(byte1, 0, byte3, 0, byte1.length);
System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length);
return byte3;
} public String getUploadSignature() throws Exception {
String strSign = "";
String contextStr = ""; long endTime = (currentTime + signValidDuration);
contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8");
contextStr += "&currentTimeStamp=" + currentTime;
contextStr += "&expireTime=" + endTime;
contextStr += "&random=" + random; try {
Mac mac = Mac.getInstance(HMAC_ALGORITHM);
SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm());
mac.init(secretKey); byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET));
byte[] sigBuf = byteMerger(hash, contextStr.getBytes("utf8"));
strSign = new String(new BASE64Encoder().encode(sigBuf).getBytes());
strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", "");
} catch (Exception e) {
throw e;
}
return strSign;
} public void setSecretId(String secretId) {
this.secretId = secretId;
} public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
} public void setCurrentTime(long currentTime) {
this.currentTime = currentTime;
} public void setRandom(int random) {
this.random = random;
} public void setSignValidDuration(int signValidDuration) {
this.signValidDuration = signValidDuration;
}
}

Signature.java

  目录结构

  

  

  Signature.java得到加密后的字符串

  通过IndexController.java中的getSign()方法将appkeyappid进行加密,得到加密后的字符串并通过函数指针回传给getSignature:getSignature

@RequestMapping("/sign")
@ResponseBody
public String getSign()
{
//得到Sign
Signature sign = new Signature();
//个人API密钥中的Secret Id
sign.setSecretId("AKIDkNsDQWZOYYVSHu49kDh9Uh1FSoxxxxxx");
//个人API密钥中的Secret Key
sign.setSecretKey("XDn1a3NWzN0Tp4vH3zpSp5fEX2xxxxxx");
sign.setCurrentTime(System.currentTimeMillis() / 1000);
sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
sign.setSignValidDuration(3600 * 24 * 2); String signature = null;
try {
signature = sign.getUploadSignature();
System.out.println("signature : " + signature);
} catch (Exception e) {
System.out.print("获取签名失败");
e.printStackTrace();
} return signature;
}
var getSignature = function(callback)
{
$.ajax({
url:[[@{~/sign}]],
type:"POST",
success:function(result)
{
alert(result);
//即可上传视频
callback(result);
} })
}

  得到加密后的字符串后就可以上传到我们个人的腾讯云控制台中

    <from id="from1">
<input id="uploadVideoNow-file" type="file" onchange="changeInput(this)" style="display:none;"> </from> <!-- a标签,当点击之后,执行change函数中的内容 -->
<a id="uploadVideoNow" href="javascript:void(0);" onclick="change()">点击上传视频</a> <!-- 在web中引入sdk,js -->
<script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader.js"></script>
<script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" th:inline="javascript">
function change()
{
$("#uploadVideoNow-file").click();
} function changeInput(e){
//alert(e.files[0].name);
var videoFile = e.files[0];
qcVideo.ugcUploader.start({
//视频文件
videoFile:videoFile,
//上传位置
getSignature:getSignature,
//是否上传声音
allowAudio:1,
//上传成功
success:function(result)
{
alert("success");
},
//上传失败
error:function(result)
{
alert("error");
},
//上传过程中
progress:function(result)
{ },
//上传完成
finish:function(result)
{
alert("finish");
}
})
} </script>

  为了更好的显示上传信息,可添加id标签,通过实现qcVideo.ugcUploader.start()中progress:function(result)方法得到上传进度信息

 

  因为上传过程中会一直调用progress:function(result)()

  所以可以添加一个id标签用来显示上传提示信息

    <!-- 结果 -->
<div id="resultBox">Gary</div>

  

  修改qcVideo.ugcUploader.start()函数

qcVideo.ugcUploader.start({
//视频文件
videoFile:videoFile,
//上传位置
getSignature:getSignature,
//是否上传声音
allowAudio:1,
//上传成功
success:function(result)
{
// alert("success");
$('[name=videoresult]').text('上传成功');
},
//上传失败
error:function(result)
{
// alert("error");
$('[name=videoresult]').text('上传失败');
},
//正在上传过程中会一直调用的Update
progress:function(result)
{
$('[name=videoname]').text(result.name);
$('[name=videosha]').text(Math.floor(result.shacurr*100)+"%");
$('[name=videocurr]').text(Math.floor(result.curr*100)+"%");
},
//上传完成
finish:function(result)
{
// alert("finish");
$('[name=videourl]').text(result.videoUrl);
}
})
} //在id里边加东西
function addUploaderMsgBox()
{
var html = '<div name = 1>'
html+='视频的名称:<span name="videoname"></span>;'+
'计算sha进度:<span name="videosha"></span>;'+
'上传进度:<span name="videocurr"></span>;'+
'上传结果:<span name="videoresult"></span>;'+
'地址:<span name="videourl"></span>;'; html+="</div>" $("#resultBox").append(html); }

 二、上传视频及封面并增加上传提示信息

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title>Gary_Video</title>
</head>
<body> <h1>Gary上传视频</h1> <from id="from1">
<input id="uploadVideoNow-file" type="file" onchange="changeInput(this)" style="display:none;"> </from> <!-- a标签,当点击之后,执行change函数中的内容 -->
<a id="uploadVideoNow" href="javascript:void(0);" onclick="change()">点击上传视频</a> <br>
<hr>
<!-- 结果 -->
<div id="resultBox">Gary</div> <!-- 在web中引入sdk,js -->
<script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader.js"></script>
<script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" th:inline="javascript"> var getSignature = function(callback)
{
$.ajax({
url:[[@{~/sign}]],
type:"POST",
success:function(result)
{
alert(result);
//即可上传视频
callback(result);
} })
} function change()
{
$("#uploadVideoNow-file").click();
} function changeInput(e){
//alert(e.files[0].name);
var videoFile = e.files[0];
//添加视频进度的显示
addUploaderMsgBox();
qcVideo.ugcUploader.start({
//视频文件
videoFile:videoFile,
//上传位置
getSignature:getSignature,
//是否上传声音
allowAudio:1,
//上传成功
success:function(result)
{
// alert("success");
$('[name=videoresult]').text('上传成功');
},
//上传失败
error:function(result)
{
// alert("error");
$('[name=videoresult]').text('上传失败');
},
//正在上传过程中会一直调用的Update
progress:function(result)
{
$('[name=videoname]').text(result.name);
$('[name=videosha]').text(Math.floor(result.shacurr*100)+"%");
$('[name=videocurr]').text(Math.floor(result.curr*100)+"%");
},
//上传完成
finish:function(result)
{
// alert("finish");
$('[name=videourl]').text(result.videoUrl);
}
})
} //在id里边加东西
function addUploaderMsgBox()
{
var html = '<div name = 1>'
html+='视频的名称:<span name="videoname"></span>;'+
'计算sha进度:<span name="videosha"></span>;'+
'上传进度:<span name="videocurr"></span>;'+
'上传结果:<span name="videoresult"></span>;'+
'地址:<span name="videourl"></span>;'; html+="</div>" $("#resultBox").append(html); } </script> </body>
</html>

video.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout">
<head>
<meta charset="UTF-8">
<title>Gary_Video</title>
</head>
<body> <form>
<!-- 添加视频 -->
<input id="addVideo-file" onchange="addVideo(this)" type="file" style="display: none;">
<!-- 添加封面 -->
<input id="addCover-file" onchange="addCover(this)" type="file" style="display:none;">
</form> <h1>上传视频+封面</h1>
<!-- 添加视频 -->
<a id="addVideo" onclick="videoClick()" href="javascript:void(0)">上传视频</a>
<!-- 添加封面 -->
<a id="addCover" onclick="coverClick()" href="javascript:void(0)">上传封面</a>
<!-- 上传按钮 -->
<a id="upload" onclick="upload()" href="javascript:void(0)">确定上传</a> <br>
<hr>
<!-- 结果 -->
<div id="resultBox">Gary</div> <script src="//imgcache.qq.com/open/qcloud/js/vod/sdk/ugcUploader.js"></script>
<script src="//code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript" th:inline="javascript"> var videoFile = null;
var coverFile = null; //得到加密后的字符串
var getSignature = function(callback)
{
$.ajax({
url:[[@{~/sign}]],
type:"POST",
success:function(result)
{
callback(result);
}
})
} //input change事件
function addVideo(e)
{
//alert(e.files[0].name);
videoFile = e.files[0];
}
//input change事件
function addCover(e)
{
//alert(e.files[0].name);
coverFile = e.files[0];
} //a标签点击事件
function videoClick()
{
$("#addVideo-file").click();
} function coverClick()
{
$("#addCover-file").click();
} //上传按钮
function upload()
{
//提示信息
addUploaderMsgBox();
startUploader();
} var startUploader = function()
{
//上传视频的核心
qcVideo.ugcUploader.start({
//视频
videoFile:videoFile,
//封面
coverFile:coverFile, getSignature:getSignature,
allowAudio:1, success:function(result)
{
//alert("success")
$('[name=videoresult]').text('上传成功')
},
error:function(result)
{
$('[name=videoresult]').text('上传失败')
},
progress:function(result)
{
$('[name=videoname]').text(result.name)
$('[name=videosha]').text(Math.floor(result.shacurr*100)+"%")
$('[name=videocurr]').text(Math.floor(result.curr*100)+"%")
},
finish:function(result)
{
$('[name=videourl]').text(result.videoUrl)
} })
} function addUploaderMsgBox()
{
var html = '<div name = 1>'
html+='视频的名称:<span name="videoname"></span>;'+
'计算sha进度:<span name="videosha"></span>;'+
'上传进度:<span name="videocurr"></span>;'+
'上传结果:<span name="videoresult"></span>;'+
'地址:<span name="videourl"></span>;'; html+="</div>" $("#resultBox").append(html); }
</script> </body>
</html>

video.html

package com.Gary.videodemo.controller;

import java.util.Random;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import com.Gary.videodemo.utils.Signature; @RestController
public class IndexController { @RequestMapping("/plus")
public ModelAndView plus()
{
return new ModelAndView("/video-plus.html");
} @RequestMapping("/")
public ModelAndView index(){
return new ModelAndView("/video.html");
} @RequestMapping("/sign")
@ResponseBody
public String getSign()
{
//得到Sign
Signature sign = new Signature();
//个人API密钥中的Secret Id
sign.setSecretId("AKIDkNsDQWZOYYVSHu49kDh9Uh1FSoxxxxxx");
//个人API密钥中的Secret Key
sign.setSecretKey("XDn1a3NWzN0Tp4vH3zpSp5fEX2xxxxxx");
sign.setCurrentTime(System.currentTimeMillis() / 1000);
sign.setRandom(new Random().nextInt(java.lang.Integer.MAX_VALUE));
sign.setSignValidDuration(3600 * 24 * 2); String signature = null;
try {
signature = sign.getUploadSignature();
System.out.println("signature : " + signature);
} catch (Exception e) {
System.out.print("获取签名失败");
e.printStackTrace();
} return signature;
} }

IndexController.java

package com.Gary.videodemo.utils;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import sun.misc.BASE64Encoder; public class Signature {
private String secretId;
private String secretKey;
private long currentTime;
private int random;
private int signValidDuration; private static final String HMAC_ALGORITHM = "HmacSHA1";
private static final String CONTENT_CHARSET = "UTF-8"; public static byte[] byteMerger(byte[] byte1, byte[] byte2) {
byte[] byte3 = new byte[byte1.length + byte2.length];
System.arraycopy(byte1, 0, byte3, 0, byte1.length);
System.arraycopy(byte2, 0, byte3, byte1.length, byte2.length);
return byte3;
} public String getUploadSignature() throws Exception {
String strSign = "";
String contextStr = ""; long endTime = (currentTime + signValidDuration);
contextStr += "secretId=" + java.net.URLEncoder.encode(secretId, "utf8");
contextStr += "&currentTimeStamp=" + currentTime;
contextStr += "&expireTime=" + endTime;
contextStr += "&random=" + random; try {
Mac mac = Mac.getInstance(HMAC_ALGORITHM);
SecretKeySpec secretKey = new SecretKeySpec(this.secretKey.getBytes(CONTENT_CHARSET), mac.getAlgorithm());
mac.init(secretKey); byte[] hash = mac.doFinal(contextStr.getBytes(CONTENT_CHARSET));
byte[] sigBuf = byteMerger(hash, contextStr.getBytes("utf8"));
strSign = new String(new BASE64Encoder().encode(sigBuf).getBytes());
strSign = strSign.replace(" ", "").replace("\n", "").replace("\r", "");
} catch (Exception e) {
throw e;
}
return strSign;
} public void setSecretId(String secretId) {
this.secretId = secretId;
} public void setSecretKey(String secretKey) {
this.secretKey = secretKey;
} public void setCurrentTime(long currentTime) {
this.currentTime = currentTime;
} public void setRandom(int random) {
this.random = random;
} public void setSignValidDuration(int signValidDuration) {
this.signValidDuration = signValidDuration;
}
}

Signature.java

  目录结构

  

  上传封面只需在qcVideo.ugcUploader.start()方法中添加coverFile:coverFile并指定文件便可

  为使视频文件和封面文件一同上传,可添加Button按钮作为上传按钮并添加点击事件upload()

    <form>
<!-- 添加视频 -->
<input id="addVideo-file" onchange="addVideo(this)" type="file" style="display: none;">
<!-- 添加封面 -->
<input id="addCover-file" onchange="addCover(this)" type="file" style="display:none;">
</form> <h1>上传视频+封面</h1>
<!-- 添加视频 -->
<a id="addVideo" onclick="videoClick()" href="javascript:void(0)">上传视频</a>
<!-- 添加封面 -->
<a id="addCover" onclick="coverClick()" href="javascript:void(0)">上传封面</a>
<!-- 上传按钮 -->
<a id="upload" onclick="upload()" href="javascript:void(0)">确定上传</a>
        //上传按钮
function upload()
{
//提示信息
addUploaderMsgBox();
startUploader();
}

  核心代码

var startUploader = function()
{
//上传视频的核心
qcVideo.ugcUploader.start({
//视频
videoFile:videoFile,
//封面
coverFile:coverFile, getSignature:getSignature,
allowAudio:1,
//文件上传成功后
success:function(result)
{
//alert("success")
$('[name=videoresult]').text('上传成功')
},
//文件上传失败后
error:function(result)
{
$('[name=videoresult]').text('上传失败')
},
//正在上传过程中会一直调用的Update
progress:function(result)
{
$('[name=videoname]').text(result.name)
$('[name=videosha]').text(Math.floor(result.shacurr*100)+"%")
$('[name=videocurr]').text(Math.floor(result.curr*100)+"%")
},
//上传完成
finish:function(result)
{
$('[name=videourl]').text(result.videoUrl)
} })
}

  

JavaWeb-SpringBoot_(上)腾讯云点播服务之视频的上传-demo的更多相关文章

  1. JavaWeb-SpringBoot_(下)腾讯云点播服务之视频的显示-demo

    腾讯视频云点播 传送门 项目在腾讯云点播服务之视频的上传(上)[附源码]的基础上添加了两个html页面 此视频  播放传送门 (播放视频GIF会超过10M...) package com.Gary.v ...

  2. 腾讯云点播视频存储(Web端视频上传)

    官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...

  3. asp.net core使用serilog将日志推送到腾讯云日志服务

    为什么是serilog? Serilog是 .NET 中最著名的结构化日志类库. 基于日志事件log events,而不是日志消息log message. 你可以将日志事件格式化为控制台的可读文本或者 ...

  4. 腾讯云容器服务 TKE 推出新一代零损耗容器网络

    随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...

  5. 在腾讯云容器服务 TKE 中利用 HPA 实现业务的弹性伸缩

    在 TKE 上利用 HPA 实现业务的弹性伸缩 概述 Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler,以下简称 HPA)可以基于 CPU 利用率.内存利 ...

  6. 腾讯云容器服务 TKE 拿下新加坡 MTCS 最高级别安全认证

    近日,腾讯云容器服务 TKE 荣获新加坡 MTCS 最高级安全认证,标志着腾讯云 TKE 在为用户提供可靠.易部署.灵活扩展等基础服务上,已经全面满足了新加坡监管机构以及多个行业客户对服务安全的要求. ...

  7. 腾讯云OCR服务二次开发

    本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题.

  8. 腾讯云游戏服务平台CMatrix品牌全新升级为GameMatrix

    近日,隶属腾讯互娱公共研发运营体系(下文称CROS)下的云游戏服务平台CMatrix宣布进行品牌升级,启用全新商标Tencent GameMatrix,将原先代表云服务的“C”替换成游戏的英文单词“G ...

  9. CODING 再携手腾讯云 Serverless,让开发者跑步上云

    近年来,腾讯云持续在云原生领域打磨和完善产品矩阵,致力于为开发者上云提供更好的产品和服务.继前段时间 CODING CI 助力腾讯云 Serverless 全新应用控制台.持续保障 Serverles ...

随机推荐

  1. Java 代码运行顺序

    1.静态代码块,只执行一次,从上到下,先父类后子类 2.父类构造代码块,从上到下,然后父类构造方法,执行次数与实例化次数相关 3.子类构造代码块,从上到下,然后子类构造方法,执行次数与实例化次数相关

  2. C# 使用Emit实现动态AOP框架 进阶篇之异常处理

    目  录 C# 使用Emit实现动态AOP框架 (一) C# 使用Emit实现动态AOP框架 (二) C# 使用Emit实现动态AOP框架 (三) C# 使用Emit实现动态AOP框架 进阶篇之异常处 ...

  3. 解决sql "Compatibility_199_804_30003" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。

    关联条件加  COLLATE Compatibility_199_804_30003

  4. 12 Django之Cookie和Session

    一.什么是Cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接 ...

  5. Solr集群的搭建概述(非教程)

    1.什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用 SolrCloud.当一个系统的索引数据量少的时候是不 ...

  6. 制作linux云主机镜像

    目录 制作linux云主机镜像 1.物理机环境准备 2.安装kvm虚拟机 3.操作虚拟机 4.在物理机上处理镜像 5.拷贝制作好的raw格式的镜像 6.发布镜像到云平台 制作linux云主机镜像 1. ...

  7. Samba编码设置方法

    弟管理學校的網頁伺服器,該伺服器也同時是大家的分享檔案集散中心,是以Linux架設起來的,該伺服器以 Unicode 作為系統編碼,而其他Windows系統則是big5(MS950)編碼,最近我要讓另 ...

  8. Delphi RS-232C标准

  9. mysql数据库:分表、多表关联、外键约束、级联操作

    一.分表.外键.级联.多对一 二.多对多 三.一对一 一.分表.外键.级联.多对一 将部门数据与员工数据放到同一张表中会造成 数据重复 结构混乱 扩展维护性差 需要分表 create table de ...

  10. 关于GRPC的讲解

    gRPC服务发现&负载均衡 https://segmentfault.com/a/1190000008672912?utm_source=tag-newest GRPC编程指南 gRPC 介绍 ...