|
- package com.simple.controller;
-
-
- import com.amazonaws.AmazonClientException;
- import com.amazonaws.AmazonServiceException;
- import com.amazonaws.auth.AWSCredentials;
- import com.amazonaws.auth.AWSCredentialsProvider;
- import com.amazonaws.auth.BasicAWSCredentials;
- import com.amazonaws.services.s3.AmazonS3;
- import com.amazonaws.services.s3.AmazonS3ClientBuilder;
- import com.amazonaws.services.s3.model.CannedAccessControlList;
- import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
- import com.amazonaws.services.s3.model.ObjectMetadata;
- import com.amazonaws.services.s3.model.PutObjectRequest;
- import com.simple.common.ResultData;
- import com.simple.config.AwsProperty;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RequestParam;
- import org.springframework.web.bind.annotation.RestController;
- import org.springframework.web.multipart.MultipartFile;
-
- import java.io.BufferedInputStream;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.net.URL;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.UUID;
-
- @RestController
- @RequestMapping(value = "upload")
- @Api(description = "文件上传接口")
- public class UploadController {
-
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
-
- @Value("${fileUpload.path}")
- private String filePath;
-
- @Value("${fileUpload.server}")
- private String server;
-
- @Autowired
- private AwsProperty awsProperty;
-
- /**
- * 上传文件
- *
- * @param multiReq
- * @return
- * @throws Exception
- */
- @PostMapping(value = "/fileUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data")
- @ApiOperation("上传文件")
- public ResultData fileUpload(@RequestParam("file") MultipartFile multiReq) {
- ResultData data = new ResultData();
- FileOutputStream fos = null;
- BufferedInputStream fs = null;
- try {
- File targetFile = new File(filePath);
- if (!targetFile.exists()) {
- targetFile.mkdirs();
- }
- String fileName = UUID.randomUUID().toString();
- int dot = multiReq.getOriginalFilename().lastIndexOf('.');
- fileName = fileName + multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length());
- fos = new FileOutputStream(new File(filePath + File.separator + fileName));
- fs = (BufferedInputStream) multiReq.getInputStream();
- byte[] buffer = new byte[1024];
- int len = 0;
- while ((len = fs.read(buffer)) != -1) {
- fos.write(buffer, 0, len);
- }
- fos.close();
- fs.close();
- data.code = ResultData.SUCCESS;
- Map<String, String> map = new HashMap<>();
- map.put("imgarray", server + "/" + fileName);
- data.data = map;
- } catch (Exception e) {
- e.printStackTrace();
- data.code = ResultData.ERROR;
- data.message = "上传失败";
- } finally {
- if (fos != null) {
- try {
- fos.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- if (fs != null) {
- try {
- fs.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
-
- }
- return data;
- }
-
- /**
- * 上传文件
- *
- * @param multiReq
- * @return
- * @throws Exception
- */
- @PostMapping(value = "/awsFileUpload", consumes = "multipart/*", headers = "content-type=multipart/form-data")
- @ApiOperation("上传文件")
- public ResultData awsfileUpload(@RequestParam("file") MultipartFile multiReq) {
- ResultData data = new ResultData();
-
-
- ObjectMetadata metadata = new ObjectMetadata();
- metadata.setContentType(multiReq.getContentType());
- metadata.setContentLength(multiReq.getSize());
-
- FileOutputStream fos = null;
- BufferedInputStream fs = null;
- try {
- AmazonS3 s3 = AmazonS3ClientBuilder.standard()
- .withRegion(awsProperty.getClientRegion())
- .withCredentials(new AWSCredentialsProvider() {
- @Override
- public AWSCredentials getCredentials() {
- return new BasicAWSCredentials(awsProperty.getAccess(), awsProperty.getSecret());
- }
-
- @Override
- public void refresh() {
-
- }
- })
- .build();
- String fileName = UUID.randomUUID().toString();
- int dot = multiReq.getOriginalFilename().lastIndexOf('.');
- fileName = fileName + multiReq.getOriginalFilename().substring(dot, multiReq.getOriginalFilename().length());
-
- s3.putObject(
- new PutObjectRequest(awsProperty.getBucketName(), fileName, multiReq.getInputStream(), metadata)
- .withCannedAcl(CannedAccessControlList.PublicRead));
- GeneratePresignedUrlRequest urlRequest = new GeneratePresignedUrlRequest(awsProperty.getBucketName(), fileName);
- URL url = s3.generatePresignedUrl(urlRequest);
- logger.info(url.toString());
-
- data.code = ResultData.SUCCESS;
- Map<String, String> map = new HashMap<>();
- map.put("imgarray", url.toString());
- data.data = map;
- return data;
- } catch (AmazonServiceException ase) {
- data.code = ResultData.ERROR;
- logger.warn("Caught an AmazonServiceException, which " +
- "means your request made it " +
- "to Amazon S3, but was rejected with an error response" +
- " for some reason.");
- logger.warn(ase.getMessage());
- } catch (AmazonClientException ace) {
- data.code = ResultData.ERROR;
- logger.warn("Caught an AmazonClientException, which " +
- "means the client encountered " +
- "an internal error while trying to " +
- "communicate with S3, " +
- "such as not being able to access the network.");
- logger.warn("Error Message: " + ace.getMessage());
- } catch (IOException ioe) {
- data.code = ResultData.ERROR;
- logger.warn("Caught an IOException: " + ioe.getMessage());
- }
- return data;
- }
-
-
- }
|