JavaWeb-SpringBoot_(上)腾讯云点播服务之视频的上传-demo
使用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 += "¤tTimeStamp=" + 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()方法将appkey和appid进行加密,得到加密后的字符串并通过函数指针回传给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 += "¤tTimeStamp=" + 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的更多相关文章
- JavaWeb-SpringBoot_(下)腾讯云点播服务之视频的显示-demo
腾讯视频云点播 传送门 项目在腾讯云点播服务之视频的上传(上)[附源码]的基础上添加了两个html页面 此视频 播放传送门 (播放视频GIF会超过10M...) package com.Gary.v ...
- 腾讯云点播视频存储(Web端视频上传)
官方文档 前言 所谓视频上传,是指开发者或其用户将视频文件上传到点播的视频存储中,以便进行视频处理.分发等. 一.简介 腾讯云点播支持如下几种视频上传方式: 控制台上传:在点播控制台上进行操作,将本地 ...
- asp.net core使用serilog将日志推送到腾讯云日志服务
为什么是serilog? Serilog是 .NET 中最著名的结构化日志类库. 基于日志事件log events,而不是日志消息log message. 你可以将日志事件格式化为控制台的可读文本或者 ...
- 腾讯云容器服务 TKE 推出新一代零损耗容器网络
随着容器技术的发展成熟,越来越多的组件迁移到容器,在技术迁移过程中,数据库,游戏,AI 这些组件对容器网络性能(时延,吞吐,稳定性)提出了更高的要求.为了得到更优的时延和吞吐表现,各大云厂商都在致力于 ...
- 在腾讯云容器服务 TKE 中利用 HPA 实现业务的弹性伸缩
在 TKE 上利用 HPA 实现业务的弹性伸缩 概述 Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler,以下简称 HPA)可以基于 CPU 利用率.内存利 ...
- 腾讯云容器服务 TKE 拿下新加坡 MTCS 最高级别安全认证
近日,腾讯云容器服务 TKE 荣获新加坡 MTCS 最高级安全认证,标志着腾讯云 TKE 在为用户提供可靠.易部署.灵活扩展等基础服务上,已经全面满足了新加坡监管机构以及多个行业客户对服务安全的要求. ...
- 腾讯云OCR服务二次开发
本文记录了对腾讯云OCR服务二次开发的代码和开发过程中遇到的问题.
- 腾讯云游戏服务平台CMatrix品牌全新升级为GameMatrix
近日,隶属腾讯互娱公共研发运营体系(下文称CROS)下的云游戏服务平台CMatrix宣布进行品牌升级,启用全新商标Tencent GameMatrix,将原先代表云服务的“C”替换成游戏的英文单词“G ...
- CODING 再携手腾讯云 Serverless,让开发者跑步上云
近年来,腾讯云持续在云原生领域打磨和完善产品矩阵,致力于为开发者上云提供更好的产品和服务.继前段时间 CODING CI 助力腾讯云 Serverless 全新应用控制台.持续保障 Serverles ...
随机推荐
- electron-vue在npm run build时报错 ⨯ cannot execute cause=fork/exec C:\Users\801\AppData\Local\electron-builder\Cache\winCodeSign\winCodeSign-2.5.0\rcedit-ia32.exe: Access is denied.
问题描述 在electron-vue执行npm run build时报错,错误如下: ⨯ cannot execute cause=fork/exec C:\Users\801\AppData\Loc ...
- vue中使用proxy配置不同端口和ip接口
问题描述: 使用vue-cli创建的项目,开发地址是localhost:8080,由于后台开发不同的模块,导致每个模块请求的ip和端口号不一致 例如:http://192.168.10.22:8081 ...
- Spring自定义标签的实现
首先 简单写下 spring xml解析的过程 通过一段简单的 调用spring代码开始 public static void main(String[] args) { ApplicationCon ...
- Java并发与多线程
1. 并发与并行 并发是指某个时间段内,多任务交替处理的能力:并行是指同时处理多任务的能力,多核CPU可以实现并行任务. 并发执行的特点: (1)并发程序间相互制约:程序执行结果的相互依赖以及共享资源 ...
- mac下MySQL出现乱码的解决方法
之前写过一篇Linux下MySQL出现乱码的解决方法,本文说下mac下的处理,其实处理方式是一样的,我电脑的mysql版本是5.7.26-log 网上很多帖子都说去/usr/local/mysql/s ...
- IPC之mqueue.c源码解读
队列的意思应该大家都清楚,不过还有有一些细节的地方不知道,下面是一个队列的源码,因该说这是队列的一部分,不是全部.而且是linux中队列,其他各种OS中队列大同小异. /* * POSIX messa ...
- 4.3. Scrapy Shell
Scrapy Shell:模拟scrapy去发送请求 Scrapy终端是一个交互终端,我们可以在未启动spider的情况下尝试及调试代码,也可以用来测试XPath或CSS表达式,查看他们的工作方式,方 ...
- [AWS - EC2]如何使用 PuTTY 连接到 Amazon Linux 2 实例。How to Connect Amazon Linux 2 Instance from Windows Using PuTTY
1. 下载 PuTTY 2. 安装到任意目录 3. 打开 PuTTYgen (注意不是 PuTTY), 如图: 选择 RSA , 点击 Load. 找到从 AWS 创建实例的时候生成的 key,要选择 ...
- MYSQL获得查询记录的行号
对于获得查询记录的行号这一功能,Oracle 中可以使用标准方法(8i版本以上),也可以使用非标准的ROWNUM,MS SQL Server 则在 2005 版本中提供了ROW_NUMBER()函数. ...
- 5.Dropout
import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.mode ...