/**
* Copyright (c) 2016-2019 人人开源 All rights reserved.
* <p>
* https://www.renren.io
* <p>
* 版权所有,侵权必究!
*/
package com.hkphantom.oss.config;
import com.hkphantom.oss.common.util.DateUtils;
import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.FileInfo;
import com.qiniu.util.Auth;
import lombok.extern.slf4j.Slf4j;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.ResponseBody;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.Date;
import java.util.UUID;
/**
* 七牛云存储
*
* @author Mark sunlightcs@gmail.com
*/
@Slf4j
public class QiniuCloudStorageService extends CloudStorageService {
private UploadManager uploadManager;
private BucketManager bucketManager;
private String token;
private Auth auth;
public QiniuCloudStorageService(CloudStorageConfig config) {
this.config = config;
//初始化
init();
}
private void init() {
uploadManager = new UploadManager(new Configuration(Zone.autoZone()));
token = Auth.create(config.getAccessKey(), config.getSecretKey()).
uploadToken(config.getBucketName());
auth = Auth.create(config.getAccessKey(), config.getSecretKey());
bucketManager = new BucketManager(auth, new Configuration(Zone.autoZone()));
}
/**
* 获取下载文件路径,即:donwloadUrl
*
* @return
*/
public String getDownloadUrl(String targetUrl) {
String downloadUrl = auth.privateDownloadUrl(targetUrl);
log.info("downloadUrl=====" + downloadUrl);
return downloadUrl;
}
/**
* 文件下载
*
* @param targetUrl
*/
@Override
public void download(String targetUrl, HttpServletResponse response) throws IOException {
//获取downloadUrl
String downloadUrl = getDownloadUrl(targetUrl);
log.info("downloadUrl=============" + downloadUrl);
//根据url地址返回文件字节流
OkHttpClient client = new OkHttpClient();
Request req = new Request.Builder().url(downloadUrl).build();
okhttp3.Response resp = null;
InputStream input = null;
OutputStream out = null;
try {
resp = client.newCall(req).execute();
System.out.println(resp.isSuccessful());
if (resp.isSuccessful()) {
ResponseBody body = resp.body();
input = body.byteStream();
String fileName = "1.jpg";
//1、设置response 响应头
// response.reset(); //设置页面不缓存,清空buffer
response.setCharacterEncoding("UTF-8"); //字符编码
// response.setContentType("multipart/form-data"); //二进制传输数据
response.setContentType(body.contentType().toString());
//设置响应头
response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(fileName, "UTF-8"));
//3、 写出文件--输出流
out = response.getOutputStream();
byte[] buff = new byte[1024];
int index = 0;
//4、执行 写出操作
while ((index = input.read(buff)) != -1) {
out.write(buff, 0, index);
out.flush();
}
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Unexpected code " + resp);
} finally {
if (out != null) {
out.close();
}
if (input != null) {
input.close();
}
System.gc();
}
//本地保存路径 //下载文件到本地
// String filePath = "E:\\hu\\";
// download(downloadUrl, filePath);
}
@Override
public String uploadFile(MultipartFile file, String suffix) {
return null;
}
/**
* 通过发送http get 请求获取文件资源
*
* @param url
* @param filepath
* @return
*/
private static void download(String url, String filepath) {
OkHttpClient client = new OkHttpClient();
System.out.println(url);
Request req = new Request.Builder().url(url).build();
okhttp3.Response resp = null;
try {
resp = client.newCall(req).execute();
System.out.println(resp.isSuccessful());
if (resp.isSuccessful()) {
ResponseBody body = resp.body();
InputStream is = body.byteStream();
byte[] data = readInputStream(is);
//判断文件夹是否存在,不存在则创建
File file = new File(filepath);
if (!file.exists() && !file.isDirectory()) {
System.out.println("===文件夹不存在===创建====");
file.mkdir();
}
File imgFile = new File(filepath + "888.jpg");
FileOutputStream fops = new FileOutputStream(imgFile);
fops.write(data);
fops.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Unexpected code " + resp);
}
}
/**
* 读取字节输入流内容
*
* @param is
* @return
*/
private static byte[] readInputStream(InputStream is) {
ByteArrayOutputStream writer = new ByteArrayOutputStream();
byte[] buff = new byte[1024 * 2];
int len = 0;
try {
while ((len = is.read(buff)) != -1) {
writer.write(buff, 0, len);
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return writer.toByteArray();
}
@Override
public String upload(byte[] data, String path) {
try {
Response res = uploadManager.put(data, path, token);
//获取文件信息
FileInfo fileInfo = bucketManager.stat(config.getBucketName(), path);
System.out.println(fileInfo.hash);
System.out.println(fileInfo.fsize);
System.out.println(fileInfo.mimeType);
System.out.println(fileInfo.putTime);
if (!res.isOK()) {
throw new RuntimeException("上传七牛出错:" + res.toString());
}
} catch (Exception e) {
throw new RuntimeException("上传文件失败,请核对七牛配置信息", e);
}
return config.getDomain() + "/" + path;
}
@Override
public String upload(InputStream inputStream, String path) {
try {
byte[] data = IOUtils.toByteArray(inputStream);
return this.upload(data, path);
} catch (IOException e) {
throw new RuntimeException("上传文件失败", e);
}
}
@Override
public String uploadSuffix(byte[] data, String suffix) {
return upload(data, getPath(config.getPrefix(), suffix));
}
@Override
public String uploadSuffix(InputStream inputStream, String suffix) {
String path = getPath(config.getPrefix(), suffix);
log.info("文件上传的路径========" + path);
return upload(input
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
java springboot 七牛云文件上传,下载,删除 (121个子文件)
QiniuCloudStorageService.class 10KB
UploadResponse.class 4KB
CloudStorageConfig.class 3KB
DateUtils.class 3KB
OssController.class 3KB
CloudStorageService.class 2KB
OSSFactory.class 985B
Assert.class 872B
OssApplication.class 732B
OssApplicationTests.class 530B
QiniuGroup.class 135B
mvnw.cmd 7KB
.gitignore 395B
.gitignore 184B
oss.iml 10KB
maven-wrapper.jar 57KB
QiniuCloudStorageService.java 10KB
DateUtils.java 5KB
CloudStorageService.java 3KB
OssController.java 2KB
CloudStorageConfig.java 808B
Assert.java 673B
OSSFactory.java 595B
OssApplication.java 316B
UploadResponse.java 284B
OssApplicationTests.java 215B
QiniuGroup.java 147B
spring-configuration-metadata.json 972B
HELP.md 893B
mvnw 10KB
maven-wrapper.properties 233B
application.properties 1B
application.properties 1B
workspace.xml 4KB
pom.xml 4KB
jarRepositories.xml 879B
Maven__org_springframework_boot_spring_boot_configuration_processor_2_6_6.xml 871B
compiler.xml 864B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_2.xml 859B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_6.xml 836B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 823B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_2.xml 818B
Maven__org_springframework_boot_spring_boot_starter_logging_2_6_6.xml 815B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_6.xml 808B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_2.xml 804B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_6.xml 801B
Maven__org_hibernate_validator_hibernate_validator_7_0_4_Final.xml 797B
Maven__org_springframework_boot_spring_boot_starter_json_2_6_6.xml 794B
Maven__org_springframework_boot_spring_boot_starter_test_2_6_6.xml 794B
Maven__org_springframework_boot_spring_boot_starter_web_2_6_6.xml 787B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_60.xml 783B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_2.xml 774B
Maven__com_fasterxml_jackson_core_jackson_databind_2_13_2_2.xml 767B
Maven__org_springframework_boot_spring_boot_starter_2_6_6.xml 759B
Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml 756B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 756B
Maven__org_junit_platform_junit_platform_commons_1_8_2.xml 756B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 756B
Maven__commons_configuration_commons_configuration_1_10.xml 754B
Maven__org_junit_platform_junit_platform_engine_1_8_2.xml 749B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_60.xml 748B
Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml 738B
Maven__org_springframework_boot_spring_boot_test_2_6_6.xml 738B
Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml 738B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_60.xml 734B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 734B
Maven__org_springframework_spring_expression_5_3_18.xml 732B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml 731B
Maven__org_jboss_logging_jboss_logging_3_4_3_Final.xml 731B
Maven__commons_fileupload_commons_fileupload_1_2_2.xml 728B
Maven__com_fasterxml_jackson_core_jackson_core_2_13_2.xml 725B
Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml 721B
Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml 717B
Maven__org_springframework_spring_context_5_3_18.xml 711B
Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml 708B
Maven__org_springframework_spring_webmvc_5_3_18.xml 704B
Maven__org_springframework_boot_spring_boot_2_6_6.xml 703B
Maven__ch_qos_logback_logback_classic_1_2_11.xml 698B
Maven__org_springframework_spring_beans_5_3_18.xml 697B
Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml 696B
Maven__commons_logging_commons_logging_1_1_1.xml 695B
Maven__org_apiguardian_apiguardian_api_1_1_2.xml 695B
Maven__org_springframework_spring_test_5_3_18.xml 690B
Maven__org_springframework_spring_core_5_3_18.xml 690B
Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml 689B
Maven__org_springframework_spring_web_5_3_18.xml 683B
Maven__org_springframework_spring_aop_5_3_18.xml 683B
Maven__org_springframework_spring_jcl_5_3_18.xml 683B
Maven__net_minidev_accessors_smart_2_4_8.xml 679B
Maven__ch_qos_logback_logback_core_1_2_11.xml 677B
Maven__com_qiniu_qiniu_java_sdk_7_2_23.xml 671B
Maven__com_jayway_jsonpath_json_path_2_6_0.xml 669B
Maven__commons_codec_commons_codec_1_10.xml 666B
Maven__net_bytebuddy_byte_buddy_1_11_22.xml 666B
Maven__org_assertj_assertj_core_3_21_0.xml 665B
Maven__org_skyscreamer_jsonassert_1_5_0.xml 660B
Maven__com_squareup_okhttp3_okhttp_3_14_9.xml 659B
Maven__org_mockito_mockito_core_4_0_0.xml 658B
Maven__org_xmlunit_xmlunit_core_2_8_4.xml 658B
Maven__org_slf4j_jul_to_slf4j_1_7_36.xml 657B
共 121 条
- 1
- 2
HKkkkkSky
- 粉丝: 18
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- yolo目标检测项目实验
- downloadFile-1.hc
- Centos7.9环境下离线安装开源版Nginx(亲测版)
- C++课程设计:基于Qt的航班信息管理系统
- ADS7822UVerilog驱动,前面传的有点问题
- 基于python的高性能爬虫程序,使用了多线程+缓存+xpath实现的,这里以彼-岸图库为例,实现,仅用于学习交流
- 中分辨率成像光谱仪(MODIS)烧毁面积产品信息MODIS-C6-BA-User-Guide-1.2.pdf
- Screenshot_20240427_172613_com.huawei.browser.jpg
- 关于学习Python的相关资源网站链接及相关介绍.docx
- (HAL库)基于STM32F103C8T6的温控PID系统[Dht11、ESP8266、无线透传、L298N……]
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0