阿里云OSS上传文件,如何通过OSS中的sdk代码OSSClient 进行本地文件的上传
阿里云OSS上传文件,如何通过OSS中的sdk代码OSSClient 进行本地文件的上传。
·
目的是实现阿里云oss文件的上传:
阿里云OSS上传文件,如何通过OSS中的sdk代码OSSClient 进行本地文件的上传
1. 代码一、OSSClient 进行本地文件的上传
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.io.IOException;
import java.io.InputStream;
public class TestOss {
Log log = LogFactory.getLog(TestOss.class);
//阿里云OSS地址,这里看根据你的oss选择
private static String endpoint = "oss-cn-shanghai.aliyuncs.com";
//阿里云OSS账号
private static String accessKeyId = "这里是你的oss key";
//阿里云OSS密钥
private static String accessKeySecret = "这里是你的 oss secret";
//阿里云OSS上的存储块bucket名字
private static String bucketName = "这是你的 oss bucket。可以理解这就是一个数据库";
/**
* 销毁
*/
public void destory() {
ossClient.shutdown();
}
private OSSClient ossClient;
public TestOss() {
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
/**
* 根据文件流和文件名和oss路径前缀上传文件到OSS
*
* @param instream 文件流
* @param ossPrefix oss路径前缀
* @param fileName 文件名包括后缀名
* @return 出错返回"" ,唯一MD5数字签名
*/
public String uploadByPrefixAndName(InputStream instream, String ossPrefix,String fileName) {
String ret = "";
try {
//创建上传Object的Metadata
ObjectMetadata objectMetadata = new ObjectMetadata();
objectMetadata.setContentLength(instream.available());
objectMetadata.setCacheControl("no-cache");
objectMetadata.setHeader("Pragma", "no-cache");
objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
objectMetadata.setContentDisposition("inline;filename=" + fileName);
//上传文件
PutObjectResult putResult = ossClient.putObject(bucketName, ossPrefix + fileName, instream, objectMetadata);
ret = putResult.getETag();
} catch (IOException e) {
log.error(e.getMessage(), e);
} finally {
try {
if (instream != null) {
instream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return ret;
}
/**
* 判断OSS服务文件上传时文件的类型contentType
*
* @param filenameExtension 文件后缀
* @return String
*/
public static String getcontentType(String filenameExtension) {
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/jpeg";
}
if (".html".equalsIgnoreCase(filenameExtension)) {
return "text/html";
}
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) ||
".doc".equalsIgnoreCase(filenameExtension)) {
return "application/msword";
}
if (".xml".equalsIgnoreCase(filenameExtension)) {
return "text/xml";
}
return "image/jpg";
}
}
2. 代码二、main方法测试
public static void main(String[] args) throws FileNotFoundException {
TestOss oss = new TestOss();
oss.uploadByPrefixAndName(new FileInputStream("E:/tmp/11.jpg") , "model/data/" ,"11.jpg");
// 三个参数 1. 本地文件的路径 2. 文件上传到阿里云哪个目录下面 3. 文件存储在阿里云上的文件名称,可以和原文件名保持一致,也可以是起个新的名字
}
本地文件上传到 阿里云oss上面 ,可以上传任意的文件,包括二进制文件。
3. 那如果我要上传一个目录呢?如何实现
把本地的一个目录下的文件都上传 到阿里云上面,如何实现。
更多推荐
已为社区贡献1条内容
所有评论(0)