阿里云OSS文件上传下载工具类

前言:

本质上就是获取配置文件信息,然后注入bean,调用sdk中提供的增删改方法;
为了避免同名文件会替换,用了hutool中唯一id生成+文件名做拼接
导入依赖:→

        <!--阿里云OSS--><!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency>

代码:

说明:设置meta头类型有2种方式,想要哪个就调用哪个的方法。Map的会更全一点。默认的类型为流,所以浏览器预览为下载,此方法就是设置浏览器访问为预览,如果不需要注释即可,用下面的方法。调用别的工具类方法见下面引用。
package com.wondertek.upload.utils;import cn.hutool.core.util.IdUtil;import com.aliyun.oss.*;
import com.aliyun.oss.model.*;
import com.wondertek.upload.model.bo.FileUploadBO;
import com.wondertek.upload.result.baseresult.ErrorCodeEnum;
import com.wondertek.upload.result.exception.BizException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.PostConstruct;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;/*** 阿里oss工具类* author xxy*/
@Slf4j
@Component
public class ALiYunOssUtil {/*** 创建模拟文件夹test/* return 文件夹名*/public static String createFolder(String folder) {// 文件夹名final String keySuffixWithSlash = folder;// 判断文件夹是否存在,不存在则创建if (!ossClient.doesObjectExist(bucketName, keySuffixWithSlash)) {// 创建文件夹ossClient.putObject(bucketName, keySuffixWithSlash, new ByteArrayInputStream(new byte[0]));log.info("创建文件夹成功");// 得到文件夹名OSSObject object = ossClient.getObject(bucketName, keySuffixWithSlash);String fileDir = object.getKey();return fileDir;}return keySuffixWithSlash;}/*** 根据key删除OSS服务器上的文件*/public static void deleteFileByUrl(String fileUrl) {try {String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);ossClient.deleteObject(bucketName, folder + fileName);log.info("删除" + bucketName + "下的文件" + folder + fileName + "成功");} catch (OSSException e) {log.error("删除文件失败:{}", e.getMessage());throw new RuntimeException(e);} catch (ClientException e) {log.error("删除文件失败:{}", e.getMessage());throw new RuntimeException(e);}}/*** 上传文件** @param multipartFile* @return*/public static FileUploadBO upload(MultipartFile multipartFile) {String path = createFolder(folder);File file = FileUtils.MultipartFileToFile(multipartFile);try {// 判断容器是否存在,不存在就创建if (!ossClient.doesBucketExist(bucketName)) {ossClient.createBucket(bucketName);CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);ossClient.createBucket(createBucketRequest);}FileUploadBO fileUploadBO = new FileUploadBO();String uploadFilePath = "";String fileUrl="";String fileName="";try {// meta设置请求头,解决访问图片地址直接下载ObjectMetadata meta = new ObjectMetadata();meta.setContentType(getContentType(multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."))));// meta.setContentType(getContentTypeByMap(multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."))));fileName=IdUtil.fastSimpleUUID() + "-" + multipartFile.getOriginalFilename();uploadFilePath = path + fileName;ossClient.putObject(new PutObjectRequest(bucketName, uploadFilePath, file, meta));//上传文件//ossClient.putObject(bucketName, path+multipartFile.getOriginalFilename(), file);// 设置权限(公开读)ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);} catch (Exception e) {log.error("文件上传失败:{}", e.getMessage());throw new BizException(ErrorCodeEnum.DOWNLOAD_ERROR);} finally {if (ossClient != null) {//ossClient.shutdown();}fileUrl="https://" + bucketName + "." + endpoint + "/" + uploadFilePath;fileUploadBO.setFileName(fileName);fileUploadBO.setFileUrl(fileUrl);return fileUploadBO;}} catch (Exception e) {log.error("文件上传失败:{}", e.getMessage());throw new BizException(ErrorCodeEnum.DOWNLOAD_ERROR);}}/*** 根据文件名称下载File类型的文件** @param fileUrl* @return*/public static MultipartFile downloadMultipartFileByUrl(String fileUrl) {try {String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);InputStream inputStream = ossClient.getObject(new GetObjectRequest(bucketName, folder + fileName)).getObjectContent();MultipartFile multipartFile = InputStreamConvertMultipartFileUtil.getMultipartFile(inputStream, fileName);return multipartFile;} catch (Exception e) {log.error("文件下载失败:{}", e.getMessage());throw new BizException(ErrorCodeEnum.GET_FILE_DOWNLOAD_URL_FAIL);} finally {if (ossClient != null) {//ossClient.shutdown();}}}/*** 根据文件名称下载File类型的文件** @param fileUrl* @return*/public static File downloadFileByUrl(String fileUrl) {try {String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);InputStream inputStream = ossClient.getObject(new GetObjectRequest(bucketName, folder + fileName)).getObjectContent();MultipartFile multipartFile = InputStreamConvertMultipartFileUtil.getMultipartFile(inputStream, fileName);File file = FileUtils.MultipartFileToFile(multipartFile);return file;} catch (Exception e) {log.error("文件下载失败:{}", e.getMessage());throw new BizException(ErrorCodeEnum.GET_FILE_DOWNLOAD_URL_FAIL);} finally {if (ossClient != null) {//ossClient.shutdown();}}}public static String getContentType(String filenameExtension) {if (".pdf".equalsIgnoreCase(filenameExtension)) {return "application/pdf";}if (".bmp".equalsIgnoreCase(filenameExtension)) {return "image/bmp";}if (".gif".equalsIgnoreCase(filenameExtension)) {return "image/gif";}if (".jpeg".equalsIgnoreCase(filenameExtension) ||".jpg".equalsIgnoreCase(filenameExtension) ||".png".equalsIgnoreCase(filenameExtension)) {return "image/jpg";}if (".html".equalsIgnoreCase(filenameExtension)) {return "text/html";}if (".mp4".equalsIgnoreCase(filenameExtension)) {return "video/mp4";}if (".txt".equalsIgnoreCase(filenameExtension)) {return "text/plain";}if (".vsd".equalsIgnoreCase(filenameExtension)) {return "application/vnd.visio";}if (".pptx".equalsIgnoreCase(filenameExtension) ||".ppt".equalsIgnoreCase(filenameExtension)) {return "application/vnd.ms-powerpoint";}if (".docx".equalsIgnoreCase(filenameExtension)) {return "application/msword";}if (".xml".equalsIgnoreCase(filenameExtension)) {return "text/xml";}return "image/jpg";}private static Map<String, String> map = new HashMap<>();static {map.put("other", "application/octet-stream");map.put(".tif", "image/tiff");map.put("0.001", "application/x-001");map.put("0.301", "application/x-301");map.put("0.323", "text/h323");map.put("0.906", "application/x-906");map.put("0.907", "drawing/907");map.put(".a11", "application/x-a11");map.put(".acp", "audio/x-mei-aac");map.put(".ai", "application/postscript");map.put(".aif", "audio/aiff");map.put(".aifc", "audio/aiff");map.put(".aiff", "audio/aiff");map.put(".anv", "application/x-anv");map.put(".asa", "text/asa");map.put(".asf", "video/x-ms-asf");map.put(".asp", "text/asp");map.put(".asx", "video/x-ms-asf");map.put(".au", "audio/basic");map.put(".avi", "video/avi");map.put(".awf", "application/vnd.adobe.workflow");map.put(".biz", "text/xml");map.put(".bmp", "application/x-bmp");map.put(".bot", "application/x-bot");map.put(".c4t", "application/x-c4t");map.put(".c90", "application/x-c90");map.put(".cal", "application/x-cals");map.put(".cat", "application/vnd.ms-pki.seccat");map.put(".cdf", "application/x-netcdf");map.put(".cdr", "application/x-cdr");map.put(".cel", "application/x-cel");map.put(".cer", "application/x-x509-ca-cert");map.put(".cg4", "application/x-g4");map.put(".cgm", "application/x-cgm");map.put(".cit", "application/x-cit");map.put(".class", "java/");map.put(".cml", "text/xml");map.put(".cmp", "application/x-cmp");map.put(".cmx", "application/x-cmx");map.put(".cot", "application/x-cot");map.put(".crl", "application/pkix-crl");map.put(".crt", "application/x-x509-ca-cert");map.put(".csi", "application/x-csi");map.put(".css", "text/css");map.put(".cut", "application/x-cut");map.put(".dbf", "application/x-dbf");map.put(".dbm", "application/x-dbm");map.put(".dbx", "application/x-dbx");map.put(".dcd", "text/xml");map.put(".dcx", "application/x-dcx");map.put(".der", "application/x-x509-ca-cert");map.put(".dgn", "application/x-dgn");map.put(".dib", "application/x-dib");map.put(".dll", "application/x-msdownload");map.put(".doc", "application/msword");map.put(".dot", "application/msword");map.put(".drw", "application/x-drw");map.put(".dtd", "text/xml");map.put(".dwf", "Model/vnd.dwf");//map.put(".dwf","application/x-dwf");map.put(".dwg", "application/x-dwg");map.put(".dxb", "application/x-dxb");map.put(".dxf", "application/x-dxf");map.put(".edn", "application/vnd.adobe.edn");map.put(".emf", "application/x-emf");map.put(".eml", "message/rfc822");map.put(".ent", "text/xml");map.put(".epi", "application/x-epi");map.put(".eps", "application/x-ps");//map.put(".eps","application/postscript");map.put(".etd", "application/x-ebx");map.put(".exe", "application/x-msdownload");map.put(".fax", "image/fax");map.put(".fdf", "application/vnd.fdf");map.put(".fif", "application/fractals");map.put(".fo", "text/xml");map.put(".frm", "application/x-frm");map.put(".g4", "application/x-g4");map.put(".gbr", "application/x-gbr");map.put(".", "application/x-");map.put(".gif", "image/gif");map.put(".gl2", "application/x-gl2");map.put(".gp4", "application/x-gp4");map.put(".hgl", "application/x-hgl");map.put(".hmr", "application/x-hmr");map.put(".hpg", "application/x-hpgl");map.put(".hpl", "application/x-hpl");map.put(".hqx", "application/mac-binhex40");map.put(".hrf", "application/x-hrf");map.put(".hta", "application/hta");map.put(".htc", "text/x-component");map.put(".htm", "text/html");map.put(".html", "text/html");map.put(".htt", "text/webviewhtml");map.put(".htx", "text/html");map.put(".icb", "application/x-icb");map.put(".ico", "image/x-icon");//map.put(".ico","application/x-ico");map.put(".iff", "application/x-iff");map.put(".ig4", "application/x-g4");map.put(".igs", "application/x-igs");map.put(".iii", "application/x-iphone");map.put(".img", "application/x-img");map.put(".ins", "application/x-internet-signup");map.put(".isp", "application/x-internet-signup");map.put(".IVF", "video/x-ivf");map.put(".java", "java/*");map.put(".jfif", "image/jpeg");map.put(".jpe", "image/jpeg");//map.put(".jpe","application/x-jpe");map.put(".jpeg", "image/jpeg");map.put(".jpg", "image/jpeg");//map.put(".jpg","application/x-jpg");map.put(".js", "application/x-javascript");map.put(".jsp", "text/html");map.put(".la1", "audio/x-liquid-file");map.put(".lar", "application/x-laplayer-reg");map.put(".latex", "application/x-latex");map.put(".lavs", "audio/x-liquid-secure");map.put(".lbm", "application/x-lbm");map.put(".lmsff", "audio/x-la-lms");map.put(".ls", "application/x-javascript");map.put(".ltr", "application/x-ltr");map.put(".m1v", "video/x-mpeg");map.put(".m2v", "video/x-mpeg");map.put(".m3u", "audio/mpegurl");map.put(".m4e", "video/mpeg4");map.put(".mac", "application/x-mac");map.put(".man", "application/x-troff-man");map.put(".math", "text/xml");map.put(".mdb", "application/msaccess");//map.put(".mdb","application/x-mdb");map.put(".mfp", "application/x-shockwave-flash");map.put(".mht", "message/rfc822");map.put(".mhtml", "message/rfc822");map.put(".mi", "application/x-mi");map.put(".mid", "audio/mid");map.put(".midi", "audio/mid");map.put(".mil", "application/x-mil");map.put(".mml", "text/xml");map.put(".mnd", "audio/x-musicnet-download");map.put(".mns", "audio/x-musicnet-stream");map.put(".mocha", "application/x-javascript");map.put(".movie", "video/x-sgi-movie");map.put(".mp1", "audio/mp1");map.put(".mp2", "audio/mp2");map.put(".mp2v", "video/mpeg");map.put(".mp3", "audio/mp3");map.put(".mp4", "video/mpeg4");map.put(".mpa", "video/x-mpg");map.put(".mpd", "application/vnd.ms-project");map.put(".mpe", "video/x-mpeg");map.put(".mpeg", "video/mpg");map.put(".mpg", "video/mpg");map.put(".mpga", "audio/rn-mpeg");map.put(".mpp", "application/vnd.ms-project");map.put(".mps", "video/x-mpeg");map.put(".mpt", "application/vnd.ms-project");map.put(".mpv", "video/mpg");map.put(".mpv2", "video/mpeg");map.put(".mpw", "application/vnd.ms-project");map.put(".mpx", "application/vnd.ms-project");map.put(".mtx", "text/xml");map.put(".mxp", "application/x-mmxp");map.put(".net", "image/pnetvue");map.put(".nrf", "application/x-nrf");map.put(".nws", "message/rfc822");map.put(".odc", "text/x-ms-odc");map.put(".out", "application/x-out");map.put(".p10", "application/pkcs10");map.put(".p12", "application/x-pkcs12");map.put(".p7b", "application/x-pkcs7-certificates");map.put(".p7c", "application/pkcs7-mime");map.put(".p7m", "application/pkcs7-mime");map.put(".p7r", "application/x-pkcs7-certreqresp");map.put(".p7s", "application/pkcs7-signature");map.put(".pc5", "application/x-pc5");map.put(".pci", "application/x-pci");map.put(".pcl", "application/x-pcl");map.put(".pcx", "application/x-pcx");map.put(".pdf", "application/pdf");//map.put(".pdf","application/pdf");map.put(".pdx", "application/vnd.adobe.pdx");map.put(".pfx", "application/x-pkcs12");map.put(".pgl", "application/x-pgl");map.put(".pic", "application/x-pic");map.put(".pko", "application/vnd.ms-pki.pko");map.put(".pl", "application/x-perl");map.put(".plg", "text/html");map.put(".pls", "audio/scpls");map.put(".plt", "application/x-plt");map.put(".png", "image/png");//map.put(".png","application/x-png");map.put(".pot", "application/vnd.ms-powerpoint");map.put(".ppa", "application/vnd.ms-powerpoint");map.put(".ppm", "application/x-ppm");map.put(".pps", "application/vnd.ms-powerpoint");map.put(".ppt", "application/vnd.ms-powerpoint");//map.put(".ppt","application/x-ppt");map.put(".pr", "application/x-pr");map.put(".prf", "application/pics-rules");map.put(".prn", "application/x-prn");map.put(".prt", "application/x-prt");map.put(".ps", "application/x-ps");//map.put(".ps","application/postscript");map.put(".ptn", "application/x-ptn");map.put(".pwz", "application/vnd.ms-powerpoint");map.put(".r3t", "text/vnd.rn-realtext3d");map.put(".ra", "audio/vnd.rn-realaudio");map.put(".ram", "audio/x-pn-realaudio");map.put(".ras", "application/x-ras");map.put(".rat", "application/rat-file");map.put(".rdf", "text/xml");map.put(".rec", "application/vnd.rn-recording");map.put(".red", "application/x-red");map.put(".rgb", "application/x-rgb");map.put(".rjs", "application/vnd.rn-realsystem-rjs");map.put(".rjt", "application/vnd.rn-realsystem-rjt");map.put(".rlc", "application/x-rlc");map.put(".rle", "application/x-rle");map.put(".rm", "application/vnd.rn-realmedia");map.put(".rmf", "application/vnd.adobe.rmf");map.put(".rmi", "audio/mid");map.put(".rmj", "application/vnd.rn-realsystem-rmj");map.put(".rmm", "audio/x-pn-realaudio");map.put(".rmp", "application/vnd.rn-rn_music_package");map.put(".rms", "application/vnd.rn-realmedia-secure");map.put(".rmvb", "application/vnd.rn-realmedia-vbr");map.put(".rmx", "application/vnd.rn-realsystem-rmx");map.put(".rnx", "application/vnd.rn-realplayer");map.put(".rp", "image/vnd.rn-realpix");map.put(".rpm", "audio/x-pn-realaudio-plugin");map.put(".rsml", "application/vnd.rn-rsml");map.put(".rt", "text/vnd.rn-realtext");map.put(".rtf", "application/msword");//map.put(".rtf","application/x-rtf");map.put(".rv", "video/vnd.rn-realvideo");map.put(".sam", "application/x-sam");map.put(".sat", "application/x-sat");map.put(".sdp", "application/sdp");map.put(".sdw", "application/x-sdw");map.put(".sit", "application/x-stuffit");map.put(".slb", "application/x-slb");map.put(".sld", "application/x-sld");map.put(".slk", "drawing/x-slk");map.put(".smi", "application/smil");map.put(".smil", "application/smil");map.put(".smk", "application/x-smk");map.put(".snd", "audio/basic");map.put(".sol", "text/plain");map.put(".sor", "text/plain");map.put(".spc", "application/x-pkcs7-certificates");map.put(".spl", "application/futuresplash");map.put(".spp", "text/xml");map.put(".ssm", "application/streamingmedia");map.put(".sst", "application/vnd.ms-pki.certstore");map.put(".stl", "application/vnd.ms-pki.stl");map.put(".stm", "text/html");map.put(".sty", "application/x-sty");map.put(".svg", "text/xml");map.put(".swf", "application/x-shockwave-flash");map.put(".tdf", "application/x-tdf");map.put(".tg4", "application/x-tg4");map.put(".tga", "application/x-tga");//map.put(".tif","image/tiff");//map.put(".tif","application/x-tif");map.put(".tiff", "image/tiff");map.put(".tld", "text/xml");map.put(".top", "drawing/x-top");map.put(".torrent", "application/x-bittorrent");map.put(".tsd", "text/xml");map.put(".txt", "text/plain");map.put(".uin", "application/x-icq");map.put(".uls", "text/iuls");map.put(".vcf", "text/x-vcard");map.put(".vda", "application/x-vda");map.put(".vdx", "application/vnd.visio");map.put(".vml", "text/xml");map.put(".vpg", "application/x-vpeg005");map.put(".vsd", "application/vnd.visio");//map.put(".vsd","application/x-vsd");map.put(".vss", "application/vnd.visio");map.put(".vst", "application/vnd.visio");//map.put(".vst","application/x-vst");map.put(".vsw", "application/vnd.visio");map.put(".vsx", "application/vnd.visio");map.put(".vtx", "application/vnd.visio");map.put(".vxml", "text/xml");map.put(".wav", "audio/wav");map.put(".wax", "audio/x-ms-wax");map.put(".wb1", "application/x-wb1");map.put(".wb2", "application/x-wb2");map.put(".wb3", "application/x-wb3");map.put(".wbmp", "image/vnd.wap.wbmp");map.put(".wiz", "application/msword");map.put(".wk3", "application/x-wk3");map.put(".wk4", "application/x-wk4");map.put(".wkq", "application/x-wkq");map.put(".wks", "application/x-wks");map.put(".wm", "video/x-ms-wm");map.put(".wma", "audio/x-ms-wma");map.put(".wmd", "application/x-ms-wmd");map.put(".wmf", "application/x-wmf");map.put(".wml", "text/vnd.wap.wml");map.put(".wmv", "video/x-ms-wmv");map.put(".wmx", "video/x-ms-wmx");map.put(".wmz", "application/x-ms-wmz");map.put(".wp6", "application/x-wp6");map.put(".wpd", "application/x-wpd");map.put(".wpg", "application/x-wpg");map.put(".wpl", "application/vnd.ms-wpl");map.put(".wq1", "application/x-wq1");map.put(".wr1", "application/x-wr1");map.put(".wri", "application/x-wri");map.put(".wrk", "application/x-wrk");map.put(".ws", "application/x-ws");map.put(".ws2", "application/x-ws");map.put(".wsc", "text/scriptlet");map.put(".wsdl", "text/xml");map.put(".wvx", "video/x-ms-wvx");map.put(".xdp", "application/vnd.adobe.xdp");map.put(".xdr", "text/xml");map.put(".xfd", "application/vnd.adobe.xfd");map.put(".xfdf", "application/vnd.adobe.xfdf");map.put(".xhtml", "text/html");map.put(".xls", "application/vnd.ms-excel");//map.put(".xls","application/x-xls");map.put(".xlw", "application/x-xlw");map.put(".xml", "text/xml");map.put(".xpl", "audio/scpls");map.put(".xq", "text/xml");map.put(".xql", "text/xml");map.put(".xquery", "text/xml");map.put(".xsd", "text/xml");map.put(".xsl", "text/xml");map.put(".xslt", "text/xml");map.put(".xwd", "application/x-xwd");map.put(".x_b", "application/x-x_b");map.put(".sis", "application/vnd.symbian.install");map.put(".sisx", "application/vnd.symbian.install");map.put(".x_t", "application/x-x_t");map.put(".ipa", "application/vnd.iphone");map.put(".apk", "application/vnd.android.package-archive");map.put(".xap", "application/x-silverlight-app");}/*** 、* 根据文件后缀名获取contentType*/public static String getContentTypeByMap(String type) {type = type.contains(".") ? type : "." + type;String contentType = map.get(type);if (StringUtils.isEmpty(contentType)) {contentType = map.get("other");}return contentType;}private static String endpoint;private static String accessKeyId;private static String accessKeySecret;private static String bucketName;private static Integer count;private static Integer outTime;private static String folder;@Value("${oss.endpoint}")public void setEndPoint(String endpoint) {ALiYunOssUtil.endpoint = endpoint;}@Value("${oss.accessKeyId}")public void setAccessKeyId(String accessKeyId) {ALiYunOssUtil.accessKeyId = accessKeyId;}@Value("${oss.accessKeySecret}")public void setAccessKeySecret(String accessKeySecret) {ALiYunOssUtil.accessKeySecret = accessKeySecret;}@Value("${oss.bucketName}")public void setBucketName(String bucketName) {ALiYunOssUtil.bucketName = bucketName;}@Value("${oss.count}")public void setCount(Integer count) {ALiYunOssUtil.count = count;}@Value("${oss.outTime}")public void setOutTime(Integer outTime) {ALiYunOssUtil.outTime = outTime;}@Value("${oss.folder}")public void setFolder(String folder) {ALiYunOssUtil.folder = folder;}private static OSS ossClient = null;@PostConstructprivate void handlerInit() {init();log.info("阿里云OSS初始化完成");}/*** 获取阿里云OSS客户端对象* <p>* return ossClient*/private void init() {//设置超时机制和重试机制ClientConfiguration conf = new ClientConfiguration();conf.setConnectionTimeout(outTime);conf.setMaxErrorRetry(count);ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);}
}
/*** @param multiFile* @return*/public static File MultipartFileToFile(MultipartFile multiFile) {// 获取文件名String fileName = multiFile.getOriginalFilename();// 获取文件后缀String prefix = fileName.substring(fileName.lastIndexOf("."));// 若须要防止生成的临时文件重复,能够在文件名后添加随机码try {//File file = File.createTempFile(FileUtils.getFileNameNotPrefix(fileName), prefix);File file = File.createTempFile(fileName, prefix);multiFile.transferTo(file);return file;} catch (Exception e) {e.printStackTrace();}return null;}
package com.wondertek.upload.utils;import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import sun.misc.BASE64Encoder;import java.io.*;/*** 将输入流转成文件* @author xiaoxiangyuan**/
public class InputStreamConvertMultipartFileUtil {private static Logger log = LoggerFactory.getLogger(InputStreamConvertMultipartFileUtil.class);/*** 获取封装得MultipartFile** @param inputStream inputStream* @param fileName    fileName* @return MultipartFile*/public static MultipartFile getMultipartFile(InputStream inputStream, String fileName) {FileItem fileItem = createFileItem(inputStream, fileName);//CommonsMultipartFile是feign对multipartFile的封装,但是要FileItem类对象return new CommonsMultipartFile(fileItem);}/*** FileItem类对象创建** @param inputStream inputStream* @param fileName    fileName* @return FileItem*/public static FileItem createFileItem(InputStream inputStream, String fileName) {FileItemFactory factory = new DiskFileItemFactory(16, null);String textFieldName = "file";FileItem item = factory.createItem(textFieldName, MediaType.MULTIPART_FORM_DATA_VALUE, true, fileName);int bytesRead = 0;byte[] buffer = new byte[10 * 1024 * 1024];OutputStream os = null;//使用输出流输出输入流的字节try {os = item.getOutputStream();while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}inputStream.close();} catch (IOException e) {log.error("Stream copy exception", e);throw new IllegalArgumentException("文件上传失败");} finally {if (os != null) {try {os.close();} catch (IOException e) {log.error("Stream close exception", e);}}if (inputStream != null) {try {inputStream.close();} catch (IOException e) {log.error("Stream close exception", e);}}}return item;}public static String generateBase64(MultipartFile file) {//file为MultipartFileBASE64Encoder base64Encoder =new BASE64Encoder();String base64EncoderImg = null;try {base64EncoderImg = base64Encoder.encode(file.getBytes());} catch (IOException e) {e.printStackTrace();}return base64EncoderImg;}/*** File转换为MultipartFile* @param file* @return*/public static MultipartFile getMultipartFile(File file) {FileItem item = new DiskFileItemFactory().createItem("file", MediaType.MULTIPART_FORM_DATA_VALUE, true, file.getName());try (InputStream input = new FileInputStream(file);OutputStream os = item.getOutputStream()) {// 流转移IOUtils.copy(input, os);} catch (Exception e) {throw new IllegalArgumentException("Invalid file: " + e, e);}return new CommonsMultipartFile(item);}public static void main(String[] args) {//File file = new File("/Users/apple/Documents/java/demo-test/src/main/resources/uploadFile/头像透明.png");File file = new File("D:\\java\\project\\demo-test\\src\\main\\resources\\uploadFile\\头像透明.png");MultipartFile multipartFile = FileUtils.fileToMultipartFile(file);//String s = generateBase64(multipartFile);String s = FileUtils.generateBase64(multipartFile,true);System.out.println(s);File file1 = new File("D:\\java\\project\\demo-test\\src\\main\\resources\\uploadFile\\头像透明1.png");MultipartFile multipartFile1 = FileUtils.fileToMultipartFile(file1);//String s = generateBase64(multipartFile);String s1 = FileUtils.generateBase64(multipartFile1,true);System.out.println(s1);if (s.equals(s1)) {System.out.println("一模一样");}}
}

Java中阿里云OSS文件上传工具类相关推荐

  1. 阿里云oss文件上传工具类

    阿里云oss文件上传工具类 阿里云oss 阿里云oss 导入文件阿里云oss的maven依赖 <!-- 阿里云oss依赖 --><dependency><groupId& ...

  2. SpringBoot整合阿里云OSS文件上传、下载、查看、删除

    SpringBoot整合阿里云OSS文件上传.下载.查看.删除 该项目源码地址:https://github.com/ggb2312/springboot-integration-examples ( ...

  3. 阿里云OSS文件上传下载,拿来即用

    什么是OSS 我们可以理解为就是一个资源服务器,在这之前我也尝试过Nginx当静态资源服务器,但效果比较一般,为什么选择阿里云OSS,只是因为最近刚好公司用到了,所以就接入了,还有其他的比如七牛云,腾 ...

  4. 解决阿里云oss文件上传部分MP4格式视频文件上传导致上传崩溃问题

    解决阿里云oss文件上传部分MP4格式视频文件上传导致上传崩溃问题 问题描述 java程序,使用阿里云oss文件上传服务,在测试时偶然发现,我用苹果手机开启高清进行摄像,将原图通过qq传到电脑上,在电 ...

  5. 阿里云视频点播-->>>阿里云媒资上传工具类及配置

    阿里云媒资上传 官网: 介绍 1.阿里云视频点播 2.视频服务流程 三,测试类中编写代码 四,媒资管理管理配置-存储管理 五,开始编写我们的JAVA代码 1.application.yml 2.配置类 ...

  6. Java学习日记8:文件上传工具类的实现和服务器给客户端发送图片

    文件上传的工具类: 每次文件上传要写很多东西,把这些封装成一个工具类,以后用起来就会方便很多. 先创建一个类存储上传文件的信息: package com.upload; /*** 每上传成功一个文件的 ...

  7. Java学习踩坑:阿里云OSS文件上传前端通过路径获取报403错误

    错误还原:我在做OSS文件上传头像时,发现头像的图片文件可以上传成功,也可以返回文件的路径.但是前端在拿着后端返回的文件图片路径去访问这个图片时,Response中的错误码为403.找了一下网上的资料 ...

  8. 阿里云OSS文件上传下载工具类

    引入依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss ...

  9. 阿里云oss文件上传(简单上传、服务端签名后直传)

    前置: 自行开通阿里oss服务: https://www.aliyun.com/product/oss?spm=a2c4g.11174283.J_8058803260.125.d9387da2TjNf ...

最新文章

  1. 原:开辟内存时,可以以结构体为单位,这样测试,是对的吧?
  2. join和group by能一块用吗_冷冻一下地球能缓解温室效应吗?| No.171
  3. 程序员过关斩将--从未停止过的系统架构设计步伐
  4. P4055 [JSOI2009]游戏(二分图匹配+博弈)
  5. 希望直接访问系统内某个链接,跳过登录验证等过程
  6. 解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示The operation could not be completed. 的问题。...
  7. linux单引号、双引号、特殊字符、换行符等用法
  8. 看微软“第四代模块化数据中心”宣传片之后的思考
  9. 关于BinaryFormatter
  10. netfilter源码学习
  11. linux打开python3_Linux环境安装python3
  12. JAVA数据库的操作(增、删、改、查)
  13. 如何将google切片发布成arcgis服务并生成tpk包
  14. 《加了pencil的ipad使用体验,想入手的看过来》
  15. [MOT学习笔记]JDE损失函数详解
  16. 一款勒索病毒的详细分析
  17. Guava中基础工具类Joiner的使用字符串拼接方法 joiner.on
  18. Python networkx 根据节点坐标来画网络图
  19. PHP配置环境搭建 MyEclipce添加PHP插件
  20. 【文史】百家讲坛讲稿txt下载

热门文章

  1. 名画30 李成《画选七幅》
  2. OSChina 周五乱弹 ——出轨率最高的竟是IT男
  3. JAVA文档注释与多行注释的区别
  4. 相机和livox激光雷达外参标定:ROS功能包---livox_camera_lidar_calibration 介绍
  5. html5的思维导图--超详细
  6. windows域控上批量修改域账号密码
  7. 微信小程序的几种弹出提示框
  8. WPF基础之几何图形
  9. Web前端 本地存储的三种方法
  10. 显著性校验与A/B测试