如何解决ErrorCode: SecondLevelDomainForbidden ErrorMessage: Please use virtual hosted style to access.

报错日志:

com.baiwang.ofs.exception.OFSException: S3上传文件: ng-bop-datart/datart/download/发票录入处理状态图表仪表盘_2023-03-21_13-40-11-101_256.xlsx 失败,ErrorCode: SecondLevelDomainForbidden ErrorMessage: Please use virtual hosted style to access., RequestId: 6419433CC1D7133434172FC1
    at com.baiwang.ofs.client.AmazonS3WrapClient.doPutObject(AmazonS3WrapClient.java:53)
    at com.baiwang.ofs.client.OFSBaseClient.putObject(OFSBaseClient.java:53)
    at datart.server.service.impl.AttachmentExcelServiceImpl.uploadFile(AttachmentExcelServiceImpl.java:86)
    at datart.server.service.impl.AttachmentExcelServiceImpl.getZlFile(AttachmentExcelServiceImpl.java:121)
    at datart.server.service.impl.DownloadServiceImpl.lambda$submitZlDownloadTask$1(DownloadServiceImpl.java:218)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Caused by: com.amazonaws.services.s3.model.AmazonS3Exception: Please use virtual hosted style to access. (Service: Amazon S3; Status Code: 403; Error Code: SecondLevelDomainForbidden; Request ID: 6419433CC1D7133434172FC1), S3 Extended Request ID: oss-cn-beijing-internal.aliyuncs.com
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1258)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1030)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:742)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:716)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:699)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:667)
    at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:649)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:513)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4169)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:4116)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1700)
    at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1563)
    at com.baiwang.ofs.client.AmazonS3WrapClient.doPutObject(AmazonS3WrapClient.java:50)

原配置信息:

ofs:
  definitions:
    ofsPrivateClient:
      clientName: ofsPrivateClient
      type: amazonS3
      properties:
        endpoint: https://oss-cn-beijing-internal.aliyuncs.com
        bucketName: ng
        objectKeyPrefix: ng-bop-datart
        accessKeyId: 123
        accessKeySecret: 123
        accessUrlPattern: ${ofs.definitions.ofsPrivateClient.properties.endpoint}/${ofs.definitions.ofsPrivateClient.properties.bucketName}/${ofs.definitions.ofsPrivateClient.properties.objectKeyPrefix}/{{objectKey}}
        connectionTimeout: 50000
        socketTimeout: 150000
        pathStyleAccessEnabled: true

解决思路:

根据具体报错日志,定位到ofs文件上传报错,使用的是amazonS3上传到oss(ali)文件服务器,"Please use virtual hosted style to access.",报错信息提示的是需要用虚拟主机方式访问,因为这是产线环境,原来测试环境使用的是minio文件服务器,所以配置的pathStyleAccessEnabled为true,指的是路径方式访问,如path style: oss-cn-shenzhen.aliyuncs.com:/mybucket/myfile,但产线阿里的oss支持的是虚拟主机方式,如virtual hosted style: mybucket.oss-cn-shenzhen.aliyuncs.com/myfile,所以直接将测试环境的配置搬到产线就是会出问题的,需要将pathStyleAccessEnabled改为false,验证通过。看过AmazonS3Client的源码,其实不配此参数也行的,因为默认为false。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值