Java开发七牛云存储 ,上传视频与图片文件 , 页面播放器GrindPlayer.swf

40 篇文章 17 订阅
订阅专栏

七牛的云存储还是比较强大的 , 可以上传文件(什么格式都可以) , 而且还可以对上传的文件进行转码等操作.
我在项目中用到的也只是很小的一部分.

七牛上传文件需要四个参数:
这里写图片描述

**一.**注册完账号以后会生成两个密匙 AccessKey , SecretKey

这里写图片描述

需要创建一个空间用来存储 bucketName , 然后会自动的生成一个测试的域名domain这个域名就是用来访问的七牛云的
http://ogvchna0j.bkt.clouddn.com/%E6%98%A5%E6%99%9A%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F_3288941_1479799629263.jpg?e=1479803244&token=K8CfB_Lk73uhqPrWWCa-I-nbPK9kFe8SfdPU8pKi:mJlIcAxC9bSPg-lQ9K5q33QND4c=

**二.**具体的API操作

七牛的API个人看来怪怪的 , 他的参数什么的都是 /参数名/参数值这样一次类推的拼接的 , 可能是因为用不同的语言开发的吧

前提工作maven要引入七牛的两个jar包

<!--七牛云存储-->
    <dependency>
        <groupId>com.qiniu</groupId>
            <artifactId>sdk</artifactId>
            <version>6.1.0</version>
    </dependency>
	<dependency>
	    <groupId>com.qiniu</groupId>
		   <artifactId>qiniu-java-sdk</artifactId>
		   <version>[7.2.0, 7.2.99]</version>
	</dependency>

import java.io.File;
import java.io.InputStream;
import org.json.JSONException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import com.qiniu.api.auth.AuthException;
import com.qiniu.api.auth.digest.Mac;
import com.qiniu.api.config.Config;
import com.qiniu.api.io.IoApi;
import com.qiniu.api.io.PutExtra;
import com.qiniu.api.io.PutRet;
import com.qiniu.api.rs.GetPolicy;
import com.qiniu.api.rs.PutPolicy;
import com.qiniu.api.rs.URLUtils;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.processing.OperationManager;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.qiniu.util.UrlSafeBase64;
import com.wqdian.common.entity.media.QiNiuMedia;

/**
 * 七牛云存储的视频文件上传 和视频转码工具等
 * 
 * @author "xinzhifu@knet.cn"
 */
@Service
public class QiniuMediaUtilService {

	private final Logger logger = LoggerFactory.getLogger(this.getClass());
	private String bucketName;
	private String domain;
	private String accessKey = "";
	private String secretKey = "";
	public static final String JPG = ".jpg";
	public static final String FLV = ".flv";

	/**
	 * 初始化参数设置
	 */
	public QiniuMediaUtilService() {

		QiNiuMedia niuMedia = QiNiuMedia.getInstance();
		this.domain = niuMedia.getDomain();
		this.bucketName = niuMedia.getBucketName();
		this.accessKey = niuMedia.getAccessKey();
		this.secretKey = niuMedia.getSecretKey();
		// 设置AccessKey
		Config.ACCESS_KEY = niuMedia.getAccessKey();
		// 设置SecretKey
		Config.SECRET_KEY = niuMedia.getSecretKey();
	}

	/**
	 * 通过文件路径上传文件
	 * 
	 * @param localFile
	 *            文件的所在路径
	 * @throws AuthException
	 * @throws JSONException
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月19日下午3:20:44
	 */
	public boolean uploadFile(String localFile) throws AuthException,
			JSONException {
		File file = new File(localFile);
		return uploadFile(file);
	}

	/**
	 * 通过文件流上传
	 * 
	 * @param file
	 *            文件流
	 * @throws AuthException
	 * @throws JSONException
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月19日下午3:21:51
	 */
	public boolean uploadFile(File file) throws AuthException, JSONException {
		long startTime = System.currentTimeMillis();// 获取当前时间
		String uptoken = getUpToken();
		// 可选的上传选项,具体说明请参见使用手册。
		PutExtra extra = new PutExtra();
		// 上传文件
		PutRet ret = IoApi.putFile(uptoken, file.getName(),
				file.getAbsolutePath(), extra);
		if (ret.ok()) {
			logger.info("视频文件上传成功!");
			long endTime = System.currentTimeMillis();
			logger.info("视频文件上传用时:" + (endTime - startTime) + "ms");
			return true;
		} else {
			logger.error("视频文件上传失败!");
			return false;
		}
	}

	/**
	 * 从 inputstream 中写入七牛
	 * @param fileName 文件名
	 * @param content 要写入的内容
	 * @return
	 * @throws AuthException
	 * @throws JSONException
	 */
	public boolean uploadFile(String fileName,InputStream in)
			throws AuthException, JSONException {
		long startTime = System.currentTimeMillis();// 获取当前时间
		// 读取的时候按的二进制,所以这里要同一
		/*ByteArrayInputStream inputStream = new ByteArrayInputStream(
				content.getBytes());*/
		String uptoken = getUpToken();
		// 可选的上传选项,具体说明请参见使用手册。
		PutExtra extra = new PutExtra();
		// 上传文件
		PutRet ret = IoApi.Put(uptoken, fileName, in, extra);
		if (ret.ok()) {
			logger.info("视频文件上传成功!");
			long endTime = System.currentTimeMillis();
			logger.info("视频文件上传用时:" + (endTime - startTime) + "ms");
			return true;
		} else {
			logger.error("视频文件上传失败!");
			return false;
		}

	}

	/**
	 * 获得下载地址
	 * 这个获取的就是你上传文件资源的链接
	 * @param filename
	 * @return
	 * @throws Exception
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月19日下午3:23:23
	 */
	public String getFileResourceUrl(String filename) throws Exception {
		String downloadUrl = "";
		if (filename != null) {
			Mac mac = getMac();
			String baseUrl = URLUtils.makeBaseUrl(domain, filename);
			GetPolicy getPolicy = new GetPolicy();
			downloadUrl = getPolicy.makeRequest(baseUrl, mac);
		}
		return downloadUrl;
	}
	
	/**
	 * 七牛上将文件删除
	 * @param fileName
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月22日下午1:29:13
	 */
	public void delete(String fileName) {

		Auth auth = Auth.create(accessKey, secretKey);
		Zone z = Zone.zone0();
		Configuration c = new Configuration(z);
		// 实例化一个BucketManager对象
		BucketManager bucketManager = new BucketManager(auth, c);
		// 要测试的空间和key,并且这个key在你空间中存在
		String bucket = bucketName;
		String key = fileName;
		try {
			// 调用delete方法移动文件
			bucketManager.delete(bucket, key);
			logger.info("文件删除成功!.[fileName={}]", fileName);
		} catch (QiniuException e) {
			logger.error("文件删除失败!.[fileName={}]", fileName);
			// 捕获异常信息
			Response r = e.response;
			logger.error(r.toString());
		}
	}

	/**
	 * 获取凭证
	 * 
	 * @throws AuthException
	 * @throws JSONException
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月19日下午3:26:34
	 */
	private String getUpToken() throws AuthException, JSONException {
		Mac mac = getMac();
		PutPolicy putPolicy = new PutPolicy(bucketName);
		String uptoken = putPolicy.token(mac);
		return uptoken;
	}

	/**
	 * 操作许可
	 * 
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月19日下午3:27:01
	 */
	private Mac getMac() {
		Mac mac = new Mac(Config.ACCESS_KEY, Config.SECRET_KEY);
		return mac;
	}

	/**
	 * 七牛的视频截图
	 * 
	 * @param fileName
	 *            要截图文件名称
	 * @param format
	 *            截图的类型(jpg.png)
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月21日下午2:43:42
	 */
	public String qiNiuMediaPrtScreen(String fileName, String format) {

		String screenPic = "";
		long startTime = System.currentTimeMillis();// 获取当前时间
		// 身份验证
		Auth auth = Auth.create(accessKey, secretKey);
		Zone z = Zone.zone0();
		Configuration c = new Configuration(z);
		// 新建一个OperationManager对象
		OperationManager operater = new OperationManager(auth, c);
		// 设置要截图的空间和key,并且这个key在你空间中存在(key就是文件的名字)
		String bucket = bucketName;
		String key = fileName;
		// 设置截图操作参数
		String fops = "vframe/" + format + "/offset/1/w/640/h/480/rotate/auto";
		// 设置截图的队列
		String pipeline = bucketName;
		// 可以对截图后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间。
		String str = fileName.substring(0, fileName.indexOf("."));
		String urlbase64 = UrlSafeBase64.encodeToString(bucketName + ":" + str
				+ "." + format);
		String pfops = fops + "|saveas/" + urlbase64;
		// 设置pipeline参数
		StringMap params = new StringMap().putWhen("force", 1, true)
				.putNotEmpty("pipeline", pipeline);
		try {
			String persistid = operater.pfop(bucket, key, pfops, params);

			screenPic = this.getFileResourceUrl(str + "." + format);
			logger.info("视频截图成功.[persistid={}]", persistid);
		} catch (QiniuException e) {
			Response r = e.response;// 捕获异常信息
			logger.info(r.toString());// 请求失败时简单状态信息
			try {
				logger.info(r.bodyString());// 响应的文本信息
			} catch (QiniuException e1) {
				logger.error(e1.getMessage());
			}
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		long endTime = System.currentTimeMillis();
		logger.info("截取视频截图用时:" + (endTime - startTime) + "ms");

		return screenPic;
	}

	/**
	 * 七牛的视频转码
	 * @param fileName  要转换的文件名称
	 * @param format  要转成的视频格式
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月21日下午2:43:42
	 */
	public String qiNiuTransCodeToAny(String fileName, String format) {
		long startTime = System.currentTimeMillis();// 获取当前时间
		// 身份验证
		Auth auth = Auth.create(accessKey, secretKey);
		Zone z = Zone.zone0();
		Configuration c = new Configuration(z);
		// 新建一个OperationManager对象
		OperationManager operater = new OperationManager(auth, c);
		// 设置要转码的空间和key,并且这个key在你空间中存在(key就是文件的名字)
		String bucket = bucketName;
		String key = fileName;
		// 设置转码操作参数
		String fops = "avthumb/" + format + "/s/640x360/vb/1.25m";
		// 设置转码的队列
		String pipeline = bucketName;
		// 可以对转码后的文件进行使用saveas参数自定义命名,当然也可以不指定文件会默认命名并保存在当前空间。
		String str = fileName.substring(0, fileName.indexOf("."));
		String urlbase64 = UrlSafeBase64.encodeToString(bucketName + ":" + str
				+ "." + format);
		String pfops = fops + "|saveas/" + urlbase64;
		// 设置pipeline参数
		StringMap params = new StringMap().putWhen("force", 1, true)
				.putNotEmpty("pipeline", pipeline);
		try {
			String persistid = operater.pfop(bucket, key, pfops, params);
			logger.info("视频转码成功.[persistid={}]", persistid);
		} catch (QiniuException e) {
			Response r = e.response;// 捕获异常信息
			logger.info(r.toString());// 请求失败时简单状态信息
			try {
				logger.info(r.bodyString());// 响应的文本信息
			} catch (QiniuException e1) {
				logger.error("视频转码失败={}", e1.getMessage());
			}
		}
		long endTime = System.currentTimeMillis();
		logger.info("视频转码用时:" + (endTime - startTime) + "ms");

		return str + "." + format;
	}

	/**
	 * 判断文件是否存在
	 * @param fileName    文件名
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月21日下午6:38:03
	 */
	public boolean isExist(String fileName) {
		boolean flag = false;
		// 身份验证
		Auth auth = Auth.create(accessKey, secretKey);
		Zone z = Zone.zone0();
		Configuration c = new Configuration(z);
		// 实例化一个BucketManager对象
		BucketManager bucketManager = new BucketManager(auth, c);
		// 要测试的空间和key,并且这个key在你空间中存在
		String bucket = bucketName;
		String key = fileName;
		try {
			// 调用stat()方法获取文件的信息
			FileInfo info = bucketManager.stat(bucket, key);
			if (info.hash != null) {
				flag = true;
			}
			logger.info("视频文件信息.[hash={},key={}]", info.hash, info.key);
		} catch (QiniuException e) {
			// 捕获异常信息
			Response r = e.response;
			logger.error("视频文件不存在={}", r.toString());
		}
		return flag;
	}

这个是自己写的封装类 , 这里设置你注册账号的各项参数

/**
 * 
 * @author "xinzhifu@knet.cn"
 */
public class QiNiuMedia {

	private static QiNiuMedia media = null;
	public static final String ACCESSKEY = "*************";
	public static final String SECRETKEY = "*************";
	public static final String BUCKETNAME = "*************";
	public static final String DOMAIN = "*************";
	private String accessKey;// 设置accessKey
	private String secretKey;// 设置secretKey
	private String bucketName;// 设置存储空间
	private String domain;// 设置七牛域名

	public String getAccessKey() {
		return accessKey;
	}

	public void setAccessKey(String accessKey) {
		this.accessKey = accessKey;
	}

	public String getSecretKey() {
		return secretKey;
	}

	public void setSecretKey(String secretKey) {
		this.secretKey = secretKey;
	}

	public String getBucketName() {
		return bucketName;
	}

	public void setBucketName(String bucketName) {
		this.bucketName = bucketName;
	}

	public String getDomain() {
		return domain;
	}

	public void setDomain(String domain) {
		this.domain = domain;
	}

	/**
	 * 实例化一个QiNiuMedia实例
	 * @uesr "xinzhifu@knet.cn"
	 * @date 2016年11月19日下午2:58:27
	 */
	public static synchronized QiNiuMedia getInstance() {
		if (media == null) {
			media = new QiNiuMedia();
			media.setAccessKey(ACCESSKEY);
			media.setSecretKey(SECRETKEY);
			media.setBucketName(BUCKETNAME);
			media.setDomain(DOMAIN);
		}
		return media;
	}
}

三.页面的播放器

数据的问题解决完了接下来就是 , 页面的播放了 , 我用了一个页面的flvplayer.swf播放器 .下边是html的代码

需要将flvplayer.swf 放到项目目录中

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
			codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0"
			width="500" height="400">
			<param name="movie"
				value="${memresctx}/js/jwplayer-7.7.1/tools/flvplayer.swf" />
			<param name="quality" value="high">
			<param name="allowScriptAccess" value="always">
			<param name="wmode" value="opaque">
			<param name="align" value="middle">
			<param name="bgcolor" value="#000000">
			<param name="swLiveConnect" value="true">
			<param name="loop" value="true">
			<param name="play" value="true">
			<param name="DeviceFont" value="false">
			<param name="allowFullScreen" value="true">
			<param name="menu" value="true">
			///这里我用的都是绝对路径
			<embed src="${memresctx}/js/jwplayer-7.7.1/tools/flvplayer.swf"
				allowfullscreen="true"
				flashvars="vcastr_file=${memresctx}/js/jwplayer-7.7.1/tools/中国合伙人.flv|${memresctx}/js/jwplayer-7.7.1/tools/屌丝男士.mov"
				quality="high"
				pluginspage="http://www.macromedia.com/go/getflashplayer"
				type="application/x-shockwave-flash" width="854" height="480"></embed>
		</object>

这里写图片描述

页面的效果是这样的 , 但是总是感觉有点丑 .

然后我又找了一个播放器 GrindPlayer.swf

// 引入一个js
<script type="text/javascript" src="http://yandex.st/swfobject/2.2/swfobject.min.js"></script>
<script type="text/javascript">
	var flashvars = {
		/* src : "${url}", */
		src : "${memresctx}/js/jwplayer-7.7.1/tools/Forrest Gump IMAX.mp4",
	};
	var params = {
		allowFullScreen : true,
		allowScriptAccess : "always",
		bgcolor : "#000000"
	};
	var attrs = {
		name : "player"
	};

	swfobject.embedSWF("${memresctx}/js/jwplayer-7.7.1/GrindPlayer.swf",
			"player", "854", "480", "10.2", null, flashvars, params, attrs);
</script>

然后再页面在加入这个
<div id="player"></div>

Ok了 , 这个就可以显示了.如下图:
这里写图片描述

看着舒服多了 , 很高端的样子!!!
http://osmfhls.kutu.ru/docs/grind/#flashvars 这个播放器的官网还有很多的参数设置 , 可以学习一下


整理了几百本各类技术电子书和视频课程 ,送给小伙伴们。同名公号内回【666】自行领取。和一些小伙伴们建了一个技术交流群,一起探讨技术、分享技术资料,旨在共同学习进步,如果感兴趣就扫码加入我们吧!

七牛云分片批量上文件视频
ajax_yan的博客
10-13 2769
<template> <el-dialog append-to-body :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.add ? '新增' : '修改'" width="800px" @opened="showDialog()"> <el-form ref="fo.
java七牛云jar包及播放视频插件
05-11
qiniu-java-sdk-7.2.6.jar,GrindPlayer.swf, HLSDynamicPlugin.swf
java视频到七牛云_使用SpringMVC上视频到七牛云上
weixin_39609354的博客
01-13 262
最近做项目用到了七牛云存储,就讲一下如何使用springMVC对视频到七牛云上。Java SDK依赖的第三方库及其版本如下:这个是使用maven管理的依赖。也可以自己手动下载jar包通过这个地址 找到就可以下载需要的依赖的。上使用的是服务器直的方式。服务端直是指客户利用七牛服务端SDK从服务端直接上文件到七牛云,交互的双方一般都在机房里面,所以服务端可以自己生成上凭证,然后利用S...
文件七牛云存储java api一个简单的demo实现
08-08
NULL 博文链接:https://yigang.iteye.com/blog/2161786
angular-qiniu-imageview2:AngularJS component for preprocessing image URL from www.qiniu.com (七牛云存储)
07-11
-- 来自七牛云存储的用于预处理图像 URL 的 AngularJS 组件 安装 bower install --save L42y/angular-qiniu-imageview2 将依赖提供的脚本文件包含到您的应用程序中 将此组件提供的angular-qiniu-imageview2.js脚本文件包含到您的应用程序中 将l42y.qiniu.image和l42y.qiniu.imageview2作为模块依赖项添加到您的应用程序 用法 < img width =" 200 " height =" 400 " qiniu-image =" {{ object.image.url }} " qiniu-imageview2 qiniu-imageview2-mode =" 1 " qiniu-imageview2-format =" w
java文件到七牛Demo
12-28
FileUploadTool.uploadToQiNiu(upToken, domain, fs, uuidStr+suffix); 七牛upToken轻松获得
java视频到七牛云_七牛云视频等功能
weixin_34620780的博客
12-26 871
一、js-sdk(前端直接上)废话不多说直接上干活:需要:QINIU_ACCESS_KEY 在个人密钥 QINIU_SECRET_KEY 在个人密钥 QINIU_BUCKET 存储空间列表的名称 QINIU_DOMAIN QINIU_DOMAIN1、需要下载js-sdk 这个本宝宝已经帮你们准备好了...
java七牛云存储视频,java实现七牛云图片文件的上
weixin_36276175的博客
03-13 366
首先需要去注册一个账号实现实名认证之后打开七牛云的我们需要先创建一个储存空间来给我们使用这里的key也需要记录下来我们等会也会用的到需要用到的参数:1、AccessKey (在“个人中心”–>“秘钥管理”中)2、SecretKey (在“个人中心”–>“秘钥管理”中)3、存储空间名字(这个是自己创建的)之后就到我们的java代码了我们首先需要导入一些七牛云的依赖包[XML]纯文本查看复...
java视频到七牛_七牛云,上视频
weixin_39832829的博客
02-27 394
七牛调起相机// 跳转到相机UIImagePickerController *ipc = [[UIImagePickerController alloc] init];ipc.sourceType = UIImagePickerControllerSourceTypeCamera;//sourcetype有三种分别是camera,photoLibrary和photoAlbumNSArray *av...
java视频到七牛云_Java图片七牛云存储-Fun言
weixin_33940031的博客
12-23 173
先介绍下七牛云:七牛云是国内领先的企业级公有云服务商,致力于打造以数据为核心的场景化PaaS服务。围绕富媒体场景,七牛先后推出了对象存储,融合CDN加速,数据通用处理,内容反垃圾服务,以及直播云服务等。目前,七牛云已经在为 50多万家企业提供服务, 亲历互联网创新创业发展的同时,也深入理解统企业转型过程中的云服务需求场景,推出了有针对性的一系列行业解决方案。。。简而言之就是一家提供网上存储的服务...
java对七牛云的操作(包含所有jar包)
01-24
详细介绍地址:http://blog.csdn.net/weixin_39549656/article/details/79156580
java springboot 七牛云文件,下载,删除
04-18
配置参数即可使用 七牛云文件,下载,删除
七牛(com.qiniu)一些jar包资源(qiniu-java-sdk和happy-dns-java
04-15
1、qiniu-java-sdk:7.2版本所有版本jar包和6.1.71、6.1.9两个版本jar包。 2、happy-dns-java:0.1.1至0.1.6各版本jar包。
java图片到七牛云 七牛云 七牛 图片 demo JS java
01-05
七牛云 七牛 图片 demo JS java 随机生成/自定义上图片名称
clj.qiniu:qiniu的Clojure SDK。 Clojure七牛云存储SDK
02-02
clj.qiniu:qiniu的Clojure SDK。 Clojure七牛云存储SDK
java实现七牛云图片文件的上
12-23
java实现七牛云图片文件的上 七牛云:https://portal.qiniu.com/create#resource 首先需要去注册一个账号实现实名认证 之后打开七牛云的 我们需要先创建一个储存空间来给我们使用 这里的key也需要记录下来我们...
JAVA-七牛云与阿里云的文件工具类
最新发布
02-23
对于开发者来说,上文件应该是都需要使用,上文件的方式有七牛云与阿里云以及很多其他方式,多数应该使用阿里云和七牛云这俩个平台,我就在此处提供对应的上、下载的工具类,可供新手直接使用
七牛云文件案例(对象存储)
12-23
七牛云文件案例(对象存储)
java视频至七牛云和视频转码
qq_57907966的博客
12-29 456
【代码】java视频至七牛云和视频转码。
七牛云上视频java
07-28
很抱歉,但是根据提供的引用内容,我无法回答关于七牛云上视频Java问题。引用\[1\]提到了七牛云存储的访问域名和绑定域名的相关内容,引用\[2\]和引用\[3\]则提到了iOS开发中的一些代码片段。请提供更多关于七牛云上视频的具体问题,我将尽力帮助您解答。 #### 引用[.reference_title] - *1* [Java进阶学习:将文件到七牛云中](https://blog.csdn.net/weixin_34625578/article/details/111890071)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [七牛云,上视频](https://blog.csdn.net/weixin_39832829/article/details/114804110)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • git 回滚代码版本的几种方式 126513
  • 过滤器 和 拦截器的 6个区别,别再傻傻分不清了 87623
  • linux 查看日志的几种基本操作 36719
  • Linux 安装docker,以及docker的基本操作 26244
  • 3万字总结,Mysql优化之精髓 18776

分类专栏

  • 分库分表 8篇
  • 工具 6篇
  • 拿来即用 1篇
  • springboot 17篇
  • 人脸识别 1篇
  • 分布式 7篇
  • 笔记 3篇
  • zookeeper
  • idea 1篇
  • 随笔 4篇
  • java开发 40篇
  • js
  • maven 1篇
  • linux 2篇
  • git 4篇
  • 人情往份
  • Redis 3篇
  • docker 1篇
  • mysql 8篇

最新评论

  • 过滤器 和 拦截器的 6个区别,别再傻傻分不清了

    一年的rookie: 确实害我找半天,获取不到是因为你的拦截器自己new的,跟顺序没有一点关系。

  • 过滤器 和 拦截器的 6个区别,别再傻傻分不清了

    奇怪的徐大王: 我就记住了兄弟别闹,你媳妇我还没生出来表情包

  • 过滤器 和 拦截器的 6个区别,别再傻傻分不清了

    阳光快乐小牛马: 应该是你代码写错了

  • 过滤器 和 拦截器的 6个区别,别再傻傻分不清了

    狗蛋啊狗蛋: 拦截器吊打过滤器

  • 过滤器 和 拦截器的 6个区别,别再傻傻分不清了

    「已注销」: 这个不错

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • 搞定了 6 种分布式ID,分库分表哪个适合做主键?
  • DIY 3 种分库分表分片算法,自己写的轮子才吊!
  • 一口气搞懂分库分表 12 种分片算法,大厂都在用
2024年7篇
2023年7篇
2022年5篇
2021年16篇
2020年55篇
2019年1篇
2018年3篇
2017年8篇
2016年3篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员小富

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

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

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

打赏作者

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

抵扣说明:

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

余额充值

深圳SEO优化公司阿坝网站推广方案价格南联网络广告推广推荐荆州网站制作设计推荐西乡模板网站建设价格白山百度竞价价格台州推广网站推荐清远网络广告推广公司宝安SEO按天收费多少钱恩施网页设计推荐安康seo网站优化价格通辽网站搭建哪家好同乐阿里店铺运营价格光明外贸网站制作哪家好昌吉网站推广方案报价贵港SEO按天计费西宁优秀网站设计推荐襄阳至尊标王庆阳网站优化排名价格赣州外贸网站制作价格保山企业网站制作哪家好梅州营销网站报价武威百度竞价包年推广哪家好绵阳百度网站优化排名哪家好南京seo网站优化报价商洛网站排名优化哪家好雅安网站制作价格徐州网站排名优化多少钱定西网站设计模板价格伊犁网站改版哪家好阿里百度竞价哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化