cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

Can't save media on Amazon S3 bucket

Former Member
0 Kudos
1,057

Hi experts

I'm currently evaluating the Amazon S3 bucket solution for our medias. Everytime I want to save a media I got this error and the media will not be persisted. The strange thing is that the upload to the bucket is working.

Any ideas what I'm doing wrong?

HMC error:

My configuration:

 # Amazon S3 Bucket
 # Put Spring bean id of the S3 strategy that keeps the logic responsible for communication between hybris and Amazon S3
 media.folder.s3medias.storage.strategy=s3MediaStorageStrategy
 media.folder.s3medias.url.strategy=s3MediaUrlStrategy
 
 # Set that URL is valid for 5 minutes
 media.folder.s3medias.url.signed.validFor=5
 
 media.folder.s3medias.accessKeyId=XXX
 media.folder.s3medias.secretAccessKey=XXX/XXX
 
 media.folder.s3medias.bucketId=testmspmediabucket
 
 media.globalSettings.s3MediaStorageStrategy.cleanOnInit=true


Amazon:

Bucket with my saved media:

Error:

  Caused by: de.hybris.platform.media.exceptions.MediaStoreException: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: dfggsdf), S3 Extended Request ID: sdfg/sdfg+sdfg/sdfg
      at de.hybris.platform.amazon.media.storage.S3MediaStorageStrategy.store(S3MediaStorageStrategy.java:149)

Full error:

I think the warning can be ignored.

 WARN  [hybrisHTTP32] [AmazonS3Client] Attempting to re-send the request to testmspmediabucket.s3-external-1.amazonaws.com with AWS V4 authentication. To avoid this warning in the future, please use region-specific endpoint to access buckets located in regions that require V4 signing.
 
 =======================================================================
 Exception in MasterServlet
 Time: Thu Jan 25 21:00:39 CET 2018
 Query string: wid=MC0x479&MC0x478_file=%2FProjects%2Fmicrospot-b2c%2Fhybris%2Ftemp%2Fhybris%2Fhmc_upload_file1801757625646233598.tmp&MC0x478_filename=c74461ae2a9917a2482ac7b53f195b3c6e2fdd59e778c673256fb29d1b07f181.jpg&cancel=false&tempfilename=upload_MC0x478.tmp&MC0x478_!save=true
 de.hybris.platform.jalo.JaloSystemException: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: fsgdfg), S3 Extended Request ID: sdfg/KHcvHkfnCuya7DDakAX+sdfg/sdfg=[HY--1]
     at de.hybris.platform.jalo.media.Media.setData(Media.java:452)
     at de.hybris.platform.jalo.media.Media.setData(Media.java:399)
     at de.hybris.platform.hmc.media.MediaFileUploadEditorChip.setData(MediaFileUploadEditorChip.java:385)
     at de.hybris.platform.hmc.media.ModalMediaFileUploadChip.setFile(ModalMediaFileUploadChip.java:118)
     at de.hybris.platform.hmc.media.ModalMediaFileUploadChip.processEvents(ModalMediaFileUploadChip.java:222)
     at de.hybris.platform.hmc.webchips.DisplayState.dispatchEvents(DisplayState.java:635)
     at de.hybris.platform.hmc.webchips.DisplayState.extractEventsFromParameters(DisplayState.java:440)
     at de.hybris.platform.hmc.webchips.DisplayState.processEvents(DisplayState.java:351)
     at de.hybris.platform.hmc.webchips.MasterServlet.process(MasterServlet.java:192)
     at de.hybris.platform.hmc.webchips.MasterServlet.doGet(MasterServlet.java:88)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:255)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$StatisticsGatewayFilter.doFilter(AbstractPlatformFilterChain.java:344)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.SecureMediaFilter.doFilter(SecureMediaFilter.java:111)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.DynamicCatalogVersionActivationFilter.doFilter(DynamicCatalogVersionActivationFilter.java:90)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.DataSourceSwitchingFilter.doFilter(DataSourceSwitchingFilter.java:70)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.SessionFilter.doFilter(SessionFilter.java:96)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.RedirectWhenSystemIsNotInitializedFilter.doFilter(RedirectWhenSystemIsNotInitializedFilter.java:101)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.DynamicTenantSwitchingFilter.doFilterInternal(DynamicTenantSwitchingFilter.java:85)
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.Log4JFilter.doFilter(Log4JFilter.java:44)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain$InternalFilterChain.doFilter(AbstractPlatformFilterChain.java:225)
     at de.hybris.platform.servicelayer.web.AbstractPlatformFilterChain.doFilterInternal(AbstractPlatformFilterChain.java:155)
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
     at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
     at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
     at de.hybris.platform.servicelayer.web.XSSFilter.processPatternsAndDoFilter(XSSFilter.java:342)
     at de.hybris.platform.servicelayer.web.XSSFilter.doFilter(XSSFilter.java:290)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:613)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1074)
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.lang.Thread.run(Thread.java:745)
 Caused by: de.hybris.platform.media.exceptions.MediaStoreException: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: dfggsdf), S3 Extended Request ID: sdfg/sdfg+sdfg/sdfg
     at de.hybris.platform.amazon.media.storage.S3MediaStorageStrategy.store(S3MediaStorageStrategy.java:149)
     at de.hybris.platform.jalo.media.MediaDataStoreCommand.execute(MediaDataStoreCommand.java:141)
     at de.hybris.platform.jalo.media.MediaManager.storeMedia(MediaManager.java:283)
     at de.hybris.platform.jalo.media.Media$1.execute(Media.java:443)
     at de.hybris.platform.tx.Transaction.execute(Transaction.java:1187)
     at de.hybris.platform.tx.Transaction.execute(Transaction.java:1152)
     at de.hybris.platform.jalo.media.Media.setData(Media.java:430)
     ... 63 more
 Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Bad Request (Service: Amazon S3; Status Code: 400; Error Code: 400 Bad Request; Request ID: sdfgg), S3 Extended Request ID: sdfggfds/sdfggf+dfgfddfg/sdfggfd=
     at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1077)
     at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:725)
     at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:460)
     at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:295)
     at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:3736)
     at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1027)
     at com.amazonaws.services.s3.AmazonS3Client.getObjectMetadata(AmazonS3Client.java:1005)
     at de.hybris.platform.amazon.media.storage.S3MediaStorageStrategy.store(S3MediaStorageStrategy.java:137)
     ... 69 more


Accepted Solutions (1)

Accepted Solutions (1)

Former Member
0 Kudos

My configuration was wrong.. created an bucket which only supports V4 auth after changing to an bucket region which supports V2 it's working.

Found this post here:

S3 Frankfurt and Seoul only support the V4 authentication API. Consequently, any requests using the V2 API will be rejected with 400 Bad Request.

https://hortonworks.github.io/hdp-aws/s3-trouble/index.html

Former Member
0 Kudos

Hi Patrick,

I am having same issue.

Can you please explain in detail, how you solved this.

Thanks Anurag

Answers (0)