//package com.jilongda.common.component; // // //import com.aliyun.oss.OSS; //import com.aliyun.oss.OSSClientBuilder; //import com.aliyun.oss.common.utils.BinaryUtil; //import com.aliyun.oss.model.MatchMode; //import com.aliyun.oss.model.OSSObject; //import com.aliyun.oss.model.PolicyConditions; //import com.aliyun.oss.model.PutObjectResult; //import com.jilongda.common.basic.ApiResult; //import com.jilongda.common.utils.WebUtils; //import io.swagger.annotations.Api; //import io.swagger.annotations.ApiOperation; //import lombok.extern.slf4j.Slf4j; //import org.springframework.beans.factory.annotation.Value; //import org.springframework.web.bind.annotation.*; //import org.springframework.web.multipart.MultipartFile; // //import javax.servlet.http.HttpServletResponse; //import java.io.File; //import java.io.IOException; //import java.io.InputStream; //import java.nio.charset.StandardCharsets; //import java.text.SimpleDateFormat; //import java.util.Date; //import java.util.LinkedHashMap; //import java.util.Map; // // ///** // * @author feiyunchuan // */ //@Slf4j //@Api(tags = "Ali-OSS文件上传接口") //@RestController //@RequestMapping("/ali-oss/") //public class AliOssFileUploadController { // // @Value("${file.cdn:https://nncdn.pharmacylinked.com}") // private String FILE_CDN; // // //// @ApiOperation(value = "单文件上传", notes = "单文件上传,rename 默认不重命名") //// @PostMapping(value = "strUpload", headers = "content-type=multipart/form-data") //// public String strUploads(@RequestParam(value = "file") MultipartFile mf) throws IOException { //// if (mf.isEmpty()) { //// return "请传入文件!"; //// } //// String fileName = mf.getOriginalFilename(); //// String TimeDir =new SimpleDateFormat("yyyy-MM-dd").format(new Date()); ////// String realPath = "D:\\" + TimeDir; //// String realPath = "/usr/local/nginx/html/images/" + TimeDir; //// File file = new File(realPath); //// // 没有目录就创建 //// if (!file.exists()) { //// file.mkdirs(); //// } //// File targetFile = new File(realPath, fileName);//目标文件 //// //开始从源文件拷贝到目标文件 //// //传图片一步到位 //// mf.transferTo(targetFile); //// //拼接数据 //// return "http://eyes.chelota.com/images/" + TimeDir +"/"+ fileName; //// } // @ApiOperation(value = "服务端上传", notes = "服务端上传") // @PostMapping(value = "upload") // public ApiResult fileUpload(@RequestParam(value = "file") MultipartFile file) throws IOException { // InputStream inputStream = file.getInputStream(); // String filename = System.currentTimeMillis() + file.getOriginalFilename(); // // Endpoint以杭州为例,其它Region请按实际情况填写。 // final String endpoint = AliOss.endpoint; // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // final String accessKeyId = AliOss.accessKeyId; // final String accessKeySecret = AliOss.accessKeySecret; // final String bucketName = AliOss.bucketName; // // 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 // String objectName = AliOss.dir + filename; // // 创建OSSClient实例。 // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 // // InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt"); // // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。 // PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream); // OSSObject ossObject = ossClient.getObject(bucketName, objectName); // String uri = ossObject.getResponse().getUri(); // // 关闭OSSClient。 // ossClient.shutdown(); //// uri = uri.replace("http://nn-bucket.oss-cn-shanghai.aliyuncs.com",FILE_CDN); // return ApiResult.okmsg(uri); // } // // // @ApiOperation(value = "服务端签名后直传", notes = "服务端签名后直传") // @PostMapping("signature") // public ApiResult> signature() { // OSS builder = new OSSClientBuilder().build(AliOss.endpoint, AliOss.accessKeyId, AliOss.accessKeySecret); // long expireTime = 30; // long expireEndTime = System.currentTimeMillis() + expireTime * 1000; // Date expiration = new Date(expireEndTime); // PolicyConditions policyConds = new PolicyConditions(); // policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000); // policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, AliOss.dir); // String postPolicy = builder.generatePostPolicy(expiration, policyConds); // byte[] binaryData = postPolicy.getBytes(StandardCharsets.UTF_8); // String encodedPolicy = BinaryUtil.toBase64String(binaryData); // String postSignature = builder.calculatePostSignature(postPolicy); // Map respMap = new LinkedHashMap<>(6); // respMap.put("accessid", AliOss.accessKeyId); // respMap.put("policy", encodedPolicy); // respMap.put("signature", postSignature); // // 示例为dir // respMap.put("dir", AliOss.dir); // // 前端为key // // respMap.put("key", AliOss.dir); // respMap.put("host", AliOss.host); //// respMap.put("cdn", AliOss.cdn); // respMap.put("expire", String.valueOf(expireEndTime / 1000)); //// // 回调 //// if (StringUtils.hasLength(AliOss.callbackUrl)) { //// JSONObject jasonCallback = new JSONObject(); //// jasonCallback.put("callbackUrl", AliOss.callbackUrl); //// String callbackBody = "{\"filename\":${object},\"size\":${size},\"mimeType\":${mimeType}}"; //// jasonCallback.put("callbackBody", callbackBody); //// jasonCallback.put("callbackBodyType", "application/json"); //// String base64CallbackBody = BinaryUtil.toBase64String(jasonCallback.toString().getBytes()); //// respMap.put("callback", base64CallbackBody); //// } // // HttpServletResponse response = WebUtils.response(); // assert response != null; // response.setHeader("Access-Control-Allow-Origin", "*"); // response.setHeader("Access-Control-Allow-Methods", "GET, POST"); // // // 关闭OSSClient。 // builder.shutdown(); // return ApiResult.success(respMap); // } // // @ApiOperation(value = "服务端上传(二进制字符串)", notes = "服务端上传") // @PostMapping(value = "str/upload") // public String strUpload(InputStream inputStream, String filename) throws IOException { // //String filename = System.currentTimeMillis() + CodeGenerateUtils.generateVolumeSn()+".jpg"; // // Endpoint以杭州为例,其它Region请按实际情况填写。 // final String endpoint = AliOss.endpoint; // // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录RAM控制台创建RAM账号。 // final String accessKeyId = AliOss.accessKeyId; // final String accessKeySecret = AliOss.accessKeySecret; // final String bucketName = AliOss.bucketName; // // 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。 // String objectName = AliOss.dir + filename; // // 创建OSSClient实例。 // OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // // 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。 // // InputStream inputStream = new FileInputStream("D:\\localpath\\examplefile.txt"); // // 依次填写Bucket名称(例如examplebucket)和Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。 // PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream); // OSSObject ossObject = ossClient.getObject(bucketName, objectName); // String uri = ossObject.getResponse().getUri(); // // 关闭OSSClient。 // ossClient.shutdown(); // return uri; // } // // /** // * oss上传成功回调 // * // * @param callback // * @return // */ // @ApiOperation(value = "oss回调", notes = "oss回调") // @PostMapping(value = "/callback") // public ApiResult callback(@RequestBody Map callback) { // String filename = "http://".concat(AliOss.bucketName).concat(".").concat(AliOss.endpoint).concat("/").concat(callback.get("filename").toString()); // return ApiResult.okmsg(filename); // } // //}