1、maven依赖(spring依赖省略)
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.10.76</version>
</dependency>
2、springmvc.xml配置
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize"><value>100000</value></property>
<property name="defaultEncoding"><value>UTF-8</value></property>
</bean>
3、controller层
@RequestMapping(value = "upload", method = RequestMethod.POST)
@ResponseBody
public String upload(HttpServletRequest request, @RequestParam(value = "file") MultipartFile file) {
return UploadUtils.upload(file);
}
4、上传至Amazon s3工具类(UploadUtils.java)
public static String upload(String userKey, MultipartFile file) {
AWSCredentials credentials = new BasicAWSCredentials("amazons3.accessKey", "amazons3.secretKey");
ClientConfiguration clientConfig = new ClientConfiguration();
clientConfig.setProtocol(Protocol.HTTP);
AmazonS3 s3 = new AmazonS3Client(credentials, clientConfig);
s3.setEndpoint("amazons3.endpoint");
String bucketName = "bucketname";
String key = "img/" + userKey;
URL url = null;
try {
if (!s3.doesBucketExist(bucketName)) {
s3.createBucket(bucketName);
}
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentLength(file.getSize());
metadata.setContentType(file.getContentType());
s3.putObject(new PutObjectRequest(bucketName, key, file.getInputStream(), metadata));
s3.setObjectAcl(bucketName, key, CannedAccessControlList.PublicRead);
GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(bucketName, key);
Date expirationDate = null;
try {
expirationDate = new SimpleDateFormat("yyyy-MM-dd").parse("2050-12-31");
} catch (ParseException e) {
e.printStackTrace();
}
urlRequest.setExpiration(expirationDate);
url = s3.generatePresignedUrl(urlRequest);
} catch (AmazonClientException | IOException e) {
e.printStackTrace();
}
return url.toString();
}