100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 阿里云(OSS)文件上传和删除

阿里云(OSS)文件上传和删除

时间:2019-12-03 10:16:53

相关推荐

阿里云(OSS)文件上传和删除

一、准备jar包

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><!-- /artifact/com.aliyun.oss/aliyun-sdk-oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.0</version></dependency>

二、controller层

/*** 上传* @param file* @return* @throws IOException* @throws InterruptedException*/@PostMapping("/aliyun/upload")public String aliyunUpload(MultipartFile file) throws IOException, InterruptedException {AliyunOSS aliyunOSS = new AliyunOSS();String fileName = DateUtil.currentSeconds() + file.getOriginalFilename();String result = aliyunOSS.upLoadFile("zhong", fileName, file.getInputStream());//todo 批量上传的时候容易出现问题,最好是控制一下时间Thread.sleep(1000);return result;}/*** 删除* @param fileUrl* @return*/@PostMapping("/aliyun/upload/delete")public Boolean aliyunUploadDetele(String fileUrl) {boolean flag = AliyunOSS.deleteFile(fileUrl);return flag;}

三、上传类和方法

@Componentpublic class AliyunOSS {private static final String endpoint = "http://oss-cn-/";//endpoint 地址private static final String accessKeyId = "AccessKey ID";//AccessKey IDprivate static final String accessKeySecret = "AccessKey Secret";//AccessKey Secretprivate static final String bucketName = "Bucket名称";//Bucket名称private static final String uploadFile = "test/";//上传文件夹名称private static final String imageBaseUrl = "https://huiphoto.oss-cn-/";//域名地址protected ThreadPoolExecutor executor;/*** 上传文件到阿里云** @param fileName 文件名,前面不用加/线* @param inputStream* @return*/public String upLoadFile(String module, String fileName, InputStream inputStream) {OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);StrBuilder builder = StrBuilder.create();//新文件名String newFilePath = builder.append(uploadFile).append(module).append("/").append(DateUtil.format(new Date(), "yyyy/MM/dd")).append("/").append(fileName).toString();int processors = Runtime.getRuntime().availableProcessors();executor = new ThreadPoolExecutor(processors * 5, processors * 10, 60L, TimeUnit.SECONDS,new ArrayBlockingQueue<Runnable>(processors * 100), Executors.defaultThreadFactory(),new ThreadPoolExecutor.CallerRunsPolicy());try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}String finalNewFilePath = newFilePath;FutureTask<String> future = new FutureTask<String>(new Callable<String>() {@Overridepublic String call() {try {//内容准备InputStream stream = inputStream;ossClient.putObject(bucketName, finalNewFilePath, stream);} catch (OSSException oe) {oe.printStackTrace();} catch (Throwable e) {e.printStackTrace();} finally {ossClient.shutdown();}return "";}});executor.execute(future);//关闭线程池if (!executor.isShutdown()) {executor.shutdown();}return imageBaseUrl + finalNewFilePath;}public static boolean deleteFile(String filePath) {OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);String aliPath = filePath.replace(imageBaseUrl, "");boolean exist = ossClient.doesObjectExist(bucketName, aliPath);if (!exist) {return false;}ossClient.deleteObject(bucketName, aliPath);ossClient.shutdown();return true;}}

四、参数讲解

endpoint(地域节点)和imageBaseUrl(bucket域名):可以在阿里云上获取这两个参数内容

打开阿里云->进入对象存储->点击你创建的bucket->概览

accessKeyIdaccessKeySecret:这两个参数就是AccessKey ID和AccessKey Secret

bucketName:阿里云上bucket的名称

uploadFile:文件夹地址,如果没有会自动创建

五、结果

利用postman调用

​​​​​​​​​​​​​​

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。