Я написал кусок кода, чтобы загрузить файл на Amazon S3. Это нормально работает в моей локальной системе. Я могу загрузить файл, и в ответ я получаю URL файла. Но когда я пытаюсь загрузить эти файлы на сервер AWS, они не загружаются, я также получаю ответ 200, и на почтальоне отображается прямоугольник.
Может кто-нибудь помочь мне решить эту проблему? Любая помощь будет оценена. Спасибо!
@Service
public class AmazonClient {
private AmazonS3 amazonS3;
@Value("${amazonProperties.accessKey}")
public String accessKey;
@Value("${amazonProperties.secretKey}")
public String secretKey;
@Value("${amazonProperties.bucketName}")
public String bucketName;
@Value("${amazonProperties.endpointUrl}")
public String endpointUrl;
@Value("${amazonProperties.region}")
public String region;
@PostConstruct
private void initializeAmazon()
{
AWSCredentials credentials = new BasicAWSCredentials(accessKey, secretKey);
this.amazonS3 = AmazonS3ClientBuilder
.standard()
.withCredentials(new AWSStaticCredentialsProvider(credentials))
.withRegion(region)
.build();
}
private File convertMultiPartToFile(MultipartFile file) throws IOException
{
File convFile = new File(file.getOriginalFilename());
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
private String generateFileName(MultipartFile multiPart)
{
return new Date().getTime() + "-" + multiPart.getOriginalFilename().replace(" ", "_");
}
private void uploadFileTos3bucket(String fileName, File file)
{
amazonS3.putObject(new PutObjectRequest(bucketName, fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead));
}
public String uploadFile(MultipartFile multipartFile) {
String fileUrl = "";
try
{
File file = convertMultiPartToFile(multipartFile);
String fileName = generateFileName(multipartFile);
fileUrl = endpointUrl + "/" + bucketName + "/" + fileName;
uploadFileTos3bucket(fileName, file);
//file.delete();
}
catch (Exception e)
{
e.printStackTrace();
}
return fileUrl;
}
public String deleteFileFromS3Bucket(String fileUrl)
{
String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
amazonS3.deleteObject(new DeleteObjectRequest(bucketName + "/", fileName));
return "Successfully deleted";
}
}