Java中MinIo文件系统工具类
1.准备工作
<!--minio pom-->
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>7.1.0</version>
</dependency>
#minio相关配置
minio:
endpoint: http://127.0.0.1:9000
accessKey: minioadmin
secretKey: minioadmin
bucketName: icloud-test
#存储文件夹
folder: cloudRecording/
2.工具类方法
2.1:上传的时候可以设置文件的contentType类型目的
2.2:设置全局访问策略
因为默认是桶的权限是private,那么就在公网上不能正常访问了.一种方式是通过web端中手动设置.第二种方式就是代码手动设置.
如果不需要公网访问,那么取消即可.
参考这篇文章:MInIO几种不同的访问策略
2.3工具类
package com.xxy.demotest.utils.minio;
import io.minio.MinioClient;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
@Data
@Component
@Slf4j
public class MinIoClientConfig {
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
/**
* 注入minio 客户端
* https://www.wenjiangs.com/doc/minio-java-client-api-reference#95c359a19513fffb37878fd413d54468
* @return
*/
@Bean
public MinioClient minioClient() {
MinioClient minioClient = MinioClient.builder()
.endpoint(endpoint)
.credentials(accessKey, secretKey)
.build();
return minioClient;
}
}
package com.xxy.demotest.utils.minio;
import com.xxy.demotest.result.baseresult.ErrorCodeEnum;
import com.xxy.demotest.result.exception.BizException;
import com.xxy.demotest.utils.InputStreamConvertMultipartFileUtil;
import com.xxy.demotest.utils.WorkUtil.FileUtil;
import io.minio.*;
import io.minio.errors.*;
import io.minio.messages.Item;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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.*;
import java.net.URLDecoder;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.time.ZonedDateTime;
import java.util.HashMap;
import java.util.Map;
/**
* @description: minio工具类
* @version:1.0
*/
@Component
@Slf4j
public class MinioUtils {
@Autowired
private MinioClient minioClient;
@Value("${minio.bucketName}")
private String bucketName;
@Value("${minio.endpoint}")
private String endpoint;
@Value("${minio.folder}")
private String folder;
@Value("${minio.accessKey}")
private String accessKey;
@Value("${minio.secretKey}")
private String secretKey;
/**
* 上传File文件
*
* @param file
* @return
*/
public String uploadFile(File file) {
MultipartFile multipartFile = FileUtil.fileToMultipartFile(file);
return uploadMultipartFile(multipartFile);
}
/**
* description: 上传MultipartFile文件
*
* @param file
* @return: java.lang.String
*/
public String uploadMultipartFile(MultipartFile file) {
//判断bucket是否存在
existBucket(bucketName);
//判断目录路径是否存在
if (!doesFolderExist(bucketName,folder)) {
try {
createFolder(bucketName,folder);
} catch (Exception e) {
//throw new RuntimeException(e);
log.error("创建目录失败!");
}
}
String fileName = file.getOriginalFilename();
String[] split = fileName.split("\\.");
if (split.length > 1) {
fileName = split[0] + "_" + System.currentTimeMillis() + "." + split[1];
} else {
fileName = fileName + System.currentTimeMillis();
}
InputStream in = null;
try {
in = file.getInputStream();
//此方法为动态获取contentType,可以直接预览
String contentType = getContentTypeByMap(fileName.substring(fileName.lastIndexOf(".")));
log.info("contentType的值为:{}", contentType);
minioClient.putObject(PutObjectArgs.builder()
.bucket(bucketName)
.object(fileName)
.stream(in, in.available(), -1)
//如果为流,默认不预览直接下载
//.contentType("application/octet-stream")
.contentType(contentType)
.build()
);
} catch (Exception e) {
e.printStackTrace();
} finally {
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return endpoint + "/" + bucketName + "/"+ fileName;
}
/**
* 根据文件名称下载File类型的文件
*
* @param fileUrl
* @return
*/
public MultipartFile downloadMultipartFileByUrl(String fileUrl) {
try {
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
MultipartFile multipartFile = InputStreamConvertMultipartFileUtil.getMultipartFile(inputStream, fileName);
return multipartFile;
} catch (Exception e) {
log.error("文件下载失败:{}", e.getMessage());
throw new BizException(ErrorCodeEnum.GET_FILE_DOWNLOAD_URL_FAIL);
}
}
/**
* 根据文件名称下载File类型的文件
*
* @param fileUrl
* @return
*/
public File downloadFileByUrl(String fileUrl) {
try {
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
InputStream inputStream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build());
MultipartFile multipartFile = InputStreamConvertMultipartFileUtil.getMultipartFile(inputStream, fileName);
File file = FileUtil.MultipartFileToFile(multipartFile);
return file;
} catch (Exception e) {
log.error("文件下载失败:{}", e.getMessage());
throw new BizException(ErrorCodeEnum.GET_FILE_DOWNLOAD_URL_FAIL);
}
}
/**
* 断点下载
*
* @param fileName 文件名称
* @param offset 起始字节的位置
* @param length 要读取的长度
* @return 流
*/
public InputStream getObject(String fileName, long offset, long length)
throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException {
return minioClient.getObject(
GetObjectArgs.builder().bucket(bucketName).object(fileName).offset(offset).length(length)
.build());
}
/**
* 获取路径下文件列表
*
* @param prefix 文件名称
* @param recursive 是否递归查找,如果是false,就模拟文件夹结构查找
* @return 二进制流
*/
public Iterable<Result<Item>> listObjects( String prefix,
boolean recursive) {
return minioClient.listObjects(
ListObjectsArgs.builder().bucket(bucketName).prefix(prefix).recursive(recursive).build());
}
/**
* 获取文件外链
*
* @param objectName 文件名称
* @param expires 过期时间 <=7 秒级
* @return url
*/
public String getPresignedObjectUrl(String objectName,
Integer expires){
try {
String fileUrl = minioClient.presignedGetObject(bucketName, objectName, expires);
return fileUrl;
} catch (Exception e) {
log.error("获取文件外链失败:{}", e.getMessage());
throw new BizException(ErrorCodeEnum.GET_FILE_DOWNLOAD_URL_FAIL);
}
}
/**
* 给presigned URL设置策略
* 允许给POST请求的presigned URL设置策略,比如接收对象上传的存储桶名称的策略,key名称前缀,过期策略。
* @param objectName 对象名
* @return map
*/
public Map<String, String> presignedGetObject(String objectName) {
try {
PostPolicy policy = new PostPolicy(bucketName, objectName,
ZonedDateTime.now().plusDays(7));
policy.setContentType("image/png");
Map<String, String> formData = minioClient.presignedPostPolicy(policy);
log.info("curl -X POST ");
for (Map.Entry<String, String> entry : formData.entrySet()) {
log.info(" -F " + entry.getKey() + "=" + entry.getValue());
}
return formData;
} catch (Exception e) {
log.error("Error occurred: " + e);
}
return null;
}
/**
* 将URLDecoder编码转成UTF8
*
* @param str
* @return
* @throws UnsupportedEncodingException
*/
public static String getUtf8ByURLDecoder(String str) throws UnsupportedEncodingException {
String url = str.replaceAll("%(?![0-9a-fA-F]{2})", "%25");
return URLDecoder.decode(url, "UTF-8");
}
/**
* 根据key删除服务器上的文件
*/
public void deleteFileByUrl(String fileUrl) {
try {
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
minioClient.removeObject(RemoveObjectArgs.builder().bucket(bucketName).object(folder + fileName).build());
log.info("删除" + bucketName + "下的文件" + folder + fileName + "成功");
} catch (Exception e) {
log.error("删除文件失败:{}", e.getMessage());
throw new RuntimeException(e);
}
}
/**
* 创建文件夹或目录
*
* @param bucketName 存储桶
* @param objectName 目录路径
*/
public ObjectWriteResponse createFolder(String bucketName, String objectName) throws ServerException, InvalidBucketNameException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException {
return minioClient.putObject(
PutObjectArgs.builder().bucket(bucketName).object(objectName).stream(
new ByteArrayInputStream(new byte[]{}), 0, -1)
.build());
}
/**
* 判断文件夹是否存在
*
* @param bucketName 存储桶
* @param objectName 文件夹名称(去掉/)
* @return true:存在
*/
public boolean doesFolderExist(String bucketName, String objectName) {
boolean exist = false;
try {
Iterable<Result<Item>> results = minioClient.listObjects(
ListObjectsArgs.builder().bucket(bucketName).prefix(objectName).recursive(false).build());
for (Result<Item> result : results) {
Item item = result.get();
if (item.isDir() && objectName.equals(item.objectName())) {
exist = true;
}
}
} catch (Exception e) {
exist = false;
}
return exist;
}
/**
* 创建minioClient
*/
private void createMinioClient() {
try {
if (null == minioClient) {
log.info("minioClient create start");
minioClient = MinioClient.builder().endpoint(endpoint).credentials(accessKey, secretKey)
.build();
createBucket();
//设置全局访问策略
setBucketPolicy();
log.info("minioClient create end");
}else{
//设置全局访问策略
setBucketPolicy();
}
} catch (Exception e) {
log.error("连接MinIO服务器异常:{}", e);
}
}
private void setBucketPolicy() throws InvalidBucketNameException {
try {
String folderName = folder.substring(0, folder.length() - 1);
// String json="{\n" +
// " \"Version\": \"2012-10-17\",\n" +
// " \"Statement\": [\n" +
// " {\n" +
// " \"Effect\": \"Allow\",\n" +
// " \"Action\": [\n" +
// " \"s3:GetObject\",\n" +
// " \"s3:ListAllMyBuckets\",\n" +
// " \"s3:ListBucket\",\n" +
// " \"s3:PutObject\",\n" +
// " \"s3:DeleteObject\",\n" +
// " \"s3:GetBucketLocation\"\n" +
// " ],\n" +
// " \"Principal\": {\"AWS\":[\"*\"]},\n" +
// " \"Resource\": [\n" +
// " \"arn:aws:s3:::icloud-test\",\n" +
// " \"arn:aws:s3:::icloud-test/**\"\n" +
// " ]\n" +
// " }\n" +
// " ]\n" +
// "}";
String config = "{\n" +
" \"Statement\": [\n" +
" {\n" +
" \"Action\": [\n" +
" \"s3:GetBucketLocation\",\n" +
" \"s3:ListBucket\"\n" +
" ],\n" +
" \"Effect\": \"Allow\",\n" +
" \"Principal\": \"*\",\n" +
" \"Resource\": \"arn:aws:s3:::" + bucketName + "\"\n" +
" },\n" +
" {\n" +
" \"Action\": [\n" +
" \"s3:GetObject\",\n" +
" \"s3:PutObject\",\n" +
" \"s3:DeleteObject\"\n" +
" ],\n" +
" \"Effect\": \"Allow\",\n" +
" \"Principal\": {\"AWS\":[\"*\"]},\n" +
" \"Resource\": \"arn:aws:s3:::" + bucketName + "/" + "**" + "\"\n" +
" }\n" +
" ],\n" +
" \"Version\": \"2012-10-17\"\n" +
"}";
minioClient.setBucketPolicy(SetBucketPolicyArgs.builder().bucket(bucketName).config(config).build());
} catch (ErrorResponseException | InsufficientDataException
| InternalException | InvalidKeyException
| InvalidResponseException | IOException
| NoSuchAlgorithmException | ServerException
| XmlParserException e) {
log.error("minio设置桶:{}策略失败", bucketName, e);
}
}
/**
* description: 判断bucket是否存在,不存在则创建
*
* @return: void
*/
public void existBucket(String name) {
try {
boolean exists = minioClient.bucketExists(BucketExistsArgs.builder().bucket(name).build());
if (!exists) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(name).build());
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 初始化Bucket
*
* @throws Exception 异常
*/
private void createBucket()
throws IOException, InvalidKeyException, InvalidResponseException, InsufficientDataException, NoSuchAlgorithmException, ServerException, InternalException, XmlParserException, InvalidBucketNameException, ErrorResponseException, RegionConflictException {
if (!minioClient.bucketExists(BucketExistsArgs.builder().bucket(bucketName).build())) {
minioClient.makeBucket(MakeBucketArgs.builder().bucket(bucketName).build());
}
}
@PostConstruct
private void handlerInit() {
createMinioClient();
log.info("MinIo初始化成功");
}
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(".aac", "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;
}
}
3.如何使用
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/118638.html