Приложение Heroku загружает изображения с помощью s3 - PullRequest
0 голосов
/ 01 марта 2020

У меня проблема с загрузкой изображения с телефона в приложение heroku. Я использую aws s3 для хранения изображений, а мое приложение размещено на heroku. При попытке загрузить изображение с телефона выдается ошибка, но при загрузке с компьютера все работает нормально. Это мое живое приложение https://lit-temple-56720.herokuapp.com/

@Controller
public class SaveController {

  @Autowired
  private ArticleService articleService;

  @Autowired
  private UserService userService;

  public static String uploadDirectory = System.getProperty("user.dir") + "/src/main/resources/public/uploads";

  @PostMapping("/api/article")
  public String saveOrUpdate(@RequestParam("message") String message, Principal principal, @RequestParam("files") MultipartFile[] files) {
    StringBuilder fileNames = new StringBuilder();
    Article article = new Article();

    String usernameAndImg = "";

    usernameAndImg = (principal.getName() + "%");
    User user = userService.getUser(principal.getName());
    article.setUser(user);
    article.setMessage(message);

    for (MultipartFile file : files) {

        Path fileNameAndPath = Paths.get(uploadDirectory, file.getOriginalFilename());
        fileNames.append(file.getOriginalFilename() + " ");
        usernameAndImg += file.getOriginalFilename();
        article.setUserName(usernameAndImg);
        try {
            Files.write(fileNameAndPath, file.getBytes());

            //=== s3 part =====

            // SECTION 1 OPTION 1: Create a S3 client with in-program credential
            //
            BasicAWSCredentials awsCreds = new BasicAWSCredentials("key", "key");
            // us-east-2 is AWS Oregon
            AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion("us-east-2").withCredentials(new AWSStaticCredentialsProvider(awsCreds))
                    .build();

            // SECTION 2: Put file in S3 bucket
            //
            String bucketName = "articles-photos";
            String folderName = "photos";
            String fileNameInS3 = file.getOriginalFilename();

            PutObjectRequest request = new PutObjectRequest(bucketName, folderName + "/" + fileNameInS3, new File(String.valueOf(fileNameAndPath)));
            request.setCannedAcl(CannedAccessControlList.PublicRead);

            s3Client.putObject(request);

            // SECTION 3: Get file from S3 bucket
            //
            S3Object fullObject;
            fullObject = s3Client.getObject(new GetObjectRequest(bucketName, folderName + "/" + fileNameInS3));

        } catch (IOException e) {
            e.printStackTrace();
        }
      }
      articleService.saveArticle(article);
      return "redirect:/index.html";
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...