发表于: 2020-06-08 23:56:14
1 1487
今天完成的事情:
金山云 七牛云 工具类
(都用spring管理对象)
七牛云
public class qiNiuYunUpFileUtil {
private String accessKey;
private String secretKey;
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 void Send(File file) {
String bucket = "bobobo123";
/**机房 Region
#华东 Region.region0(), Region.huadong()
#华北 Region.region1(), Region.huabei()
#华南 Region.region2(), Region.huanan()
#北美 Region.regionNa0(), Region.beimei()
#东南亚 Region.regionAs0(), Region.xinjiapo()
#注意
#若不指定 Region 或 Region.autoRegion() ,则会使用 自动判断 区域,使用相应域名处理。
#如果可以明确 区域 的话,最好指定固定区域,这样可以少一步网络请求,少一步出错的可能。
*/
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.huadong());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = file.getName();
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(file, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println("key===========" + putRet.key);
System.out.println("hash===============" + putRet.hash);
} catch (
QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
}
金山云
public class godCloudUpFileUtil {
//ID
private String AccessKeyID;
//密匙
private String AccessKeySecret;
//地址
private String address;
public String getAccessKeyID() {
return AccessKeyID;
}
public void setAccessKeyID(String accessKeyID) {
AccessKeyID = accessKeyID;
}
public String getAccessKeySecret() {
return AccessKeySecret;
}
public void setAccessKeySecret(String accessKeySecret) {
AccessKeySecret = accessKeySecret;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String upFile(File file){
String bucket = "bobobo123";
String key = file.getName();
//创建配置对象的实例
Ks3ClientConfig config = new Ks3ClientConfig();
config.setEndpoint(address);
// *true:表示以自定义域名访问
// *false:表示以KS3的外网域名或内网域名访问,默认为false
config.setDomainMode(false);
config.setProtocol(Ks3ClientConfig.PROTOCOL.http);
// true表示以 endpoint/{bucket}/{key}的方式访问,false表示以 {bucket}.endpoint/{key}的方式访问
// 如果domainMode设置为true,pathStyleAccess可忽略设置
config.setPathStyleAccess(false);
HttpClientConfig hconfig = new HttpClientConfig();
//在HttpClientConfig中可以设置httpclient的相关属性,比如代理,超时,重试等。
config.setHttpClientConfig(hconfig);
Ks3 client = new Ks3Client(AccessKeyID, AccessKeySecret, config);
/* 或者:client.setKs3config(config); */
//上传一个公开文件
//该方法需要三个参数,第一个参数为已经建好的存储空间名称。第二个参数为文件在KS3上保持的路径,比如:image.jpg,2015/10/19/image.jpg 等。第三个参数为要上传的文件对象。
PutObjectRequest request = new PutObjectRequest(bucket, key, file);
//request.setCannedAcl(CannedAccessControlList.PublicRead);
client.putObject(request);
//自己拼接url 获取图片地址
String url = "http://"+address+"/"+bucket+"/"+key;
System.out.println("生成的url为"+url);
return url;
//私有文件获取URL访问方式
// client.generatePresignedUrl(bucket,key,1000);
// ResponseHeaderOverrides overrides = new ResponseHeaderOverrides();
// String url = client.generatePresignedUrl(bucket,key,1000,overrides);
// System.out.println(url);
// return url;
}
}
前端上传图片按钮
<form action ="/upProfile" method="post" enctype="multipart/form-data">
用户名<input type ="text" name="name" value="">
<br>
<input type ="file" name="file" value="上传头像">
<br>
<input type="submit" value="上传"></td>
</form>
</body>
</html>
控制层
接收图片
利用工具类传入第三方后 再生成图片url
插入到数据库img里
@RequestMapping(value = "/upProfile", method = RequestMethod.POST)
public boolean upProfile(@RequestParam("name")String username,@RequestParam("file") MultipartFile file){
logger.info("传入用户名"+username);
logger.info("传入的图片类型"+file.getContentType());
logger.info("图片名"+file.getOriginalFilename());
//图片名(qwer.jpg)
String fileName ="D:\\"+ file.getOriginalFilename();
File files = new File(fileName);
try {
//向金山云上传图片并获取图片链接
String url = sendFile.upFile(files);
logger.info("图片的url为"+url);
MyAccount account = new MyAccount();
account.setUsername(username);
account.setImg(url);
logger.info("要传入方法的参数account为"+account);
boolean tf = my.updateImgByName(account);
logger.info("上传头像成功!"+tf);
return true;
} catch (Exception e) {
logger.info("上传头像失败!");
return false;
}
}
文件是用 MultipartFile来接收的 还需要引入一个依赖
<!-- 传图片文件所需 https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
以及 配置spring-mvc
<!-- 文件上传所需 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding">
<value>UTF-8</value>
</property>
<property name="maxUploadSize">
<!-- 上传文件大小限制为31M,31*1024*1024 -->
<value>32505856</value>
</property>
<property name="maxInMemorySize">
<value>4096</value>
</property>
</bean>
不然..就会陷入无休止的报错
上传 插入成功~
缩略图
云里有这个功能 创建样式直接用即可
防盗链:
啥是盗链: 别人偷走你的图片链接 放到自己网站里 白嫖
防盗链的原理:http 协议中,如果从一个网页跳到另一个网页,http 头字段里面会带个 Referer。图片服务器通过检测 Referer 是否来自规定域名,来进行防盗链。
云储存都有自己的防盗链设置 根据自己需求配就行
图片的迁移
我要从七牛云 迁移到 金山云
下了官方的迁移工具
修改conf配置
按官方文档 开始运行迁移
这配置文件都能把我的文件读出来 就是获取数据失败了 GET DATA FAIL
我所有的bucket和object都是公共属性 也不是权限的问题
看了看报错 无法读取图片url 我也打不开
一看七牛云的主界面 我赠送的临时域名没了...妈蛋
真有你的七牛云
还是再整个把 阿里云OSS也行
明天计划的事情:
深度思考
提交任务
评论