MiniO S3踩坑记录

MiniO踩坑记录

使用 aws s3 api 连接 minio 上传文件时报错如下

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: 前言中不允许有内容。
	at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604)
	at com.amazonaws.services.s3.internal.S3ErrorResponseHandler.createException(S3ErrorResponseHandler.java:122)
	at com.amazonaws.services.s3.internal.S3ErrorResponseHandler.handle(S3ErrorResponseHandler.java:71)
	at com.amazonaws.services.s3.internal.S3ErrorResponseHandler.handle(S3ErrorResponseHandler.java:52)
	at com.amazonaws.http.AwsErrorResponseHandler.handleAse(AwsErrorResponseHandler.java:58)
	at com.amazonaws.http.AwsErrorResponseHandler.handle(AwsErrorResponseHandler.java:45)
	at com.amazonaws.http.AwsErrorResponseHandler.handle(AwsErrorResponseHandler.java:27)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1861)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1418)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1387)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1157)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:814)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:781)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:755)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:715)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:697)
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:561)
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:541)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5456)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5403)
	at com.amazonaws.services.s3.AmazonS3Client.access$300(AmazonS3Client.java:421)
	at com.amazonaws.services.s3.AmazonS3Client$PutObjectStrategy.invokeServiceCall(AmazonS3Client.java:6531)
	at com.amazonaws.services.s3.AmazonS3Client.uploadObject(AmazonS3Client.java:1861)
	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1821)
	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1746)
	at com.xxx.util.S3ClientUtils.uploadFile(S3ClientUtils.java:92)
	at com.xxx.S3Test.main(S3Test.java:37)
11:27:15.648 [main] DEBUG com.amazonaws.request - Received error response: com.amazonaws.services.s3.model.AmazonS3Exception: Method Not Allowed (Service: Amazon S3; Status Code: 405; Error Code: 405 Method Not Allowed; Request ID: null; S3 Extended Request ID: null; Proxy: null), S3 Extended Request ID: null
Exception in thread "main" com.amazonaws.services.s3.model.AmazonS3Exception: Method Not Allowed (Service: Amazon S3; Status Code: 405; Error Code: 405 Method Not Allowed; Request ID: null; S3 Extended Request ID: null; Proxy: null), S3 Extended Request ID: null
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1879)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.handleServiceErrorResponse(AmazonHttpClient.java:1418)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeOneRequest(AmazonHttpClient.java:1387)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeHelper(AmazonHttpClient.java:1157)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.doExecute(AmazonHttpClient.java:814)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.executeWithTimer(AmazonHttpClient.java:781)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.execute(AmazonHttpClient.java:755)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutor.access$500(AmazonHttpClient.java:715)
	at com.amazonaws.http.AmazonHttpClient$RequestExecutionBuilderImpl.execute(AmazonHttpClient.java:697)
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:561)
	at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:541)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5456)
	at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:5403)
	at com.amazonaws.services.s3.AmazonS3Client.access$300(AmazonS3Client.java:421)
	at com.amazonaws.services.s3.AmazonS3Client$PutObjectStrategy.invokeServiceCall(AmazonS3Client.java:6531)
	at com.amazonaws.services.s3.AmazonS3Client.uploadObject(AmazonS3Client.java:1861)
	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1821)
	at com.amazonaws.services.s3.AmazonS3Client.putObject(AmazonS3Client.java:1746)
	at com.xxx.util.S3ClientUtils.uploadFile(S3ClientUtils.java:92)
	at com.xxx.S3Test.main(S3Test.java:37)

原因:

我部署 minio 的命令如下:

docker run -p 9000:9000 \
     --net=host \
     --name minio \
     -d --restart=always \
     -e "MINIO_ACCESS_KEY=minioadmin" \
     -e "MINIO_SECRET_KEY=minioadmin" \
     -v /usr/local/docker/minio/data:/data \
     -v /usr/local/docker/minio/config:/root/.minio \
     minio/minio:RELEASE.2023-04-28T18-11-17Z server \
     /data --console-address ":9090" -address ":9000"

其中
--console-address ":9090":指定MinIO控制台的地址为":9090",允许通过该地址访问MinIO的Web界面。
-address ":9000":指定MinIO服务器的地址为":9000",允许通过该地址访问MinIO的API接口。

我代码中用 9090 端口所以报错,改成 9000 就好了。

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Minio是一个开源的对象存储服务器,它兼容Amazon S3 API。它可以帮助我们实现大文件的上传和下载。 在使用Minio上传大文件时,有几个关键的步骤需要遵循: 1. 连接Minio服务器:首先,我们需要使用Minio客户端库或Minio命令行工具连接到Minio服务器。我们需要提供服务器的访问密钥、访问密钥ID以及服务器的地址。 2. 创建存储桶:在上传大文件之前,我们需要在Minio服务器上创建一个存储桶来存储我们的文件。存储桶是Minio用于组织和管理对象的容器。 3. 分片文件:对于大文件的上传,我们可以将大文件分割成更小的块,称为分片,然后逐个上传这些分片。这些分片可以是相同或不同大小。 4. 并发上传分片:为了加快上传速度,我们可以使用多线程或并发的方式同时上传多个分片。这样可以利用网络带宽更充分,并且在传输过程可以更快地恢复错误。 5. 检查分片完整性:在上传完所有分片后,我们可以使用校验和或哈希算法来检查分片的完整性。这样可以确保服务器上存储的文件与原始文件完全一致。 6. 合并分片:最后,我们需要使用Minio提供的API将所有分片合并为一个完整的文件。合并后的文件将在存储桶创建,并可以通过访问其URL来进行访问或下载。 总之,使用MinioS3 API,我们可以方便地实现对大文件的上传和下载,并且通过分片和并发上传等技术,可以提高上传速度和稳定性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值