什么是CDN?java实现CDN
CDN : 内容分发网络Content Delivery Network
众所周知,如果图片上传到自身的服务器,用户访问站点时,因为要顺序的从服务端下载所需资源数据,速度会很慢,严重影响用户体验。CDN(内容分发网络)圆满解决了这个问题,以七牛云为例,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问相应速度和命中率
本人第一次做小站,小白级别,用的腾讯的服务器99一年,搞活动时候买的,CDN选的七牛的(优点免费),通过CNAME域名解析映射到七牛给的域名地址
腾讯服务:云服务注册
七牛云:https://portal.qiniu.com/qvm/active?code=1381868331O7ktV
package test;
import java.io.File;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
/**
* 七牛 java sdk 简单上传,覆盖上传,文件上传
* @author yunlingfly
*/
public class SimpleUpload {
Auth auth = Auth.create(AccountMgr.ACCESS_KEY, AccountMgr.SECRET_KEY);
UploadManager uploadManager = new UploadManager();
/**
* 获取凭证
* @param bucketName 空间名称
* @param key 如果需要覆盖上传则设置此参数
* @return
*/
public String getUpToken(String bucketName,String key) {
return auth.uploadToken(bucketName);
}
/**
* 上传方法1
* @param filePath 文件路径 (也可以是字节数组、或者File对象)
* @param key 上传到七牛上的文件的名称 (同一个空间下,名称【key】是唯一的)
* @param bucketName 空间名称 (这里是为了获取上传凭证)
*/
public void upload(String filePath, String key, String bucketName) {
try {
// 调用put方法上传
Response res = uploadManager.put(filePath, key, getUpToken(bucketName,key));
// 打印返回的信息
System.out.println(res.bodyString());
} catch (QiniuException e) {
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.println(r.toString());
try {
// 响应的文本信息
System.out.println(r.bodyString());
} catch (QiniuException qe) {
// ignore
}
}
}
/**
* 上传方法2
* @param file 文件
* @param key 上传到七牛上的文件的名称 (同一个空间下,名称【key】是唯一的)
* @param bucketName 空间名称 (这里是为了获取上传凭证)
*/
public void upload(File file, String key, String bucketName) {
try {
// 调用put方法上传
Response res = uploadManager.put(file, key, getUpToken(bucketName,key));
// 打印返回的信息
System.out.println(res.bodyString());
} catch (QiniuException e) {
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.println(r.toString());
try {
// 响应的文本信息
System.out.println(r.bodyString());
} catch (QiniuException qe) {
// ignore
}
}
}
/**
* 上传方法3 覆盖上传
* @param path
* 上传文件路径
* @param bucketName
* 空间名
* @param key
* 文件名
*/
public void overrideUpload(String path, String key, String bucketName) {
try {
String token = getUpToken(bucketName, key);//获取 token
Response response = uploadManager.put(path, key, token);//执行上传,通过token来识别 该上传是“覆盖上传”
System.out.println(response.toString());
} catch (QiniuException e) {
System.out.println(e.response.statusCode);
e.printStackTrace();
}
}
/**
* 主函数:程序入口,测试功能
* @param args
*/
public static void main(String[] args) {
// 上传文件的路径,因为在Mac下,所以路径和windows下不同
String filePath = "D:\\test.txt";
// 要上传的空间
String bucketName = "test";
// 上传到七牛后保存的文件名
String key = "sometext.txt";
// 这里的filepath可以直接替换成File如下注释所示
// File file=new File(filePath);
// new SimpleUpload().upload(file, key, bucketName);
new SimpleUpload().upload(filePath, key, bucketName);
}
}