将大文件上传到 MinIO 服务器时出错
Error uploading large files to MinIO server
这是我的代码:
public async Task UploadFile(string bucketName, Stream fileStream, string fileName, long fileSize, string contentType)
{
bool found = await minioClient.BucketExistsAsync(bucketName);
if (!found)
{
await minioClient.MakeBucketAsync(bucketName);
}
// Upload a file to bucket.
await minioClient.PutObjectAsync(bucketName, fileName, fileStream, fileSize, contentType);
}
其中:
存储桶名称:"patients"
stream :上传到 asp.net 网页的结果流
文件大小:19589050
内容类型:"application/pdf"
它适用于最小的 PDF 文件(40KB、100KB)
但是如果我尝试上传最大的文件(例如 20 MB)我有这个例外:
MinIO API responded with message=The request signature we calculated
does not match the signature you provided. Check your key and signing
method.
堆栈跟踪:
in Minio.MinioClient.ParseError(IRestResponse 响应)
在 Minio.MinioClient.<>c.<.ctor>b__80_0(IRestResponse 响应)
在 Minio.MinioClient.HandleIfErrorResponse(IRestResponse 响应,IEnumerable`1 处理程序,DateTime startTime)
在 Minio.MinioClient.d__84.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 Minio.MinioClient.d__20.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务)
在 Minio.MinioClient.d__15.MoveNext()
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 API.Managers.MinIOManager.d__5.MoveNext() 在 C:\Users\dcalzetta\source\repos\TPO_Web\API\Managers\MinIOManager.cs:riga 43
--- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione ---
在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)
在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)
在 System.Runtime.CompilerServices.TaskAwaiter.GetResult()
在 API.Controllers.DocumentController.d__7.MoveNext() 在 C:\Users\dcalzetta\source\repos\TPO_Web\API\Controllers\DocumentController.cs:riga 288
我哪里错了?
我正在使用 docker MINIO 服务器进行开发,
docker 运行 -d -p 9000:9000 -v /opt/minio/data:/data --restart unless-stopped -e "MINIO_ACCESS_KEY=xxxxxxx" -e "MINIO_SECRET_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" minio/minio 服务器/数据
在我的 web.config 中,我将最大上传大小扩展到 100Mb,
<system.web>
<compilation debug="true" targetFramework="4.6.2" />
<httpRuntime targetFramework="4.6.1" maxRequestLength="102428" />
</system.web>
...
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="102428800" />
</requestFiltering>
</security>
我自己发现的问题,
问题是我的项目中使用的 RestSharp 版本,
我使用的是最新的 106.6.10,这个版本上传失败。
然后我尝试逐步降级,
并且使用 RestSharp 到版本 106.4.2(及更低版本),上传工作没有错误!
这是我的代码:
public async Task UploadFile(string bucketName, Stream fileStream, string fileName, long fileSize, string contentType)
{
bool found = await minioClient.BucketExistsAsync(bucketName);
if (!found)
{
await minioClient.MakeBucketAsync(bucketName);
}
// Upload a file to bucket.
await minioClient.PutObjectAsync(bucketName, fileName, fileStream, fileSize, contentType);
}
其中:
存储桶名称:"patients"
stream :上传到 asp.net 网页的结果流
文件大小:19589050
内容类型:"application/pdf"
它适用于最小的 PDF 文件(40KB、100KB) 但是如果我尝试上传最大的文件(例如 20 MB)我有这个例外:
MinIO API responded with message=The request signature we calculated does not match the signature you provided. Check your key and signing method.
堆栈跟踪:
in Minio.MinioClient.ParseError(IRestResponse 响应) 在 Minio.MinioClient.<>c.<.ctor>b__80_0(IRestResponse 响应) 在 Minio.MinioClient.HandleIfErrorResponse(IRestResponse 响应,IEnumerable`1 处理程序,DateTime startTime) 在 Minio.MinioClient.d__84.MoveNext() --- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione --- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 Minio.MinioClient.d__20.MoveNext() --- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione --- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(任务任务) 在 Minio.MinioClient.d__15.MoveNext() --- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione --- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 API.Managers.MinIOManager.d__5.MoveNext() 在 C:\Users\dcalzetta\source\repos\TPO_Web\API\Managers\MinIOManager.cs:riga 43 --- Fine traccia dello stack da posizione precedente dove è stata generata l'eccezione --- 在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务) 在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) 在 System.Runtime.CompilerServices.TaskAwaiter.GetResult() 在 API.Controllers.DocumentController.d__7.MoveNext() 在 C:\Users\dcalzetta\source\repos\TPO_Web\API\Controllers\DocumentController.cs:riga 288
我哪里错了?
我正在使用 docker MINIO 服务器进行开发,
docker 运行 -d -p 9000:9000 -v /opt/minio/data:/data --restart unless-stopped -e "MINIO_ACCESS_KEY=xxxxxxx" -e "MINIO_SECRET_KEY=yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy" minio/minio 服务器/数据
在我的 web.config 中,我将最大上传大小扩展到 100Mb,
<system.web>
<compilation debug="true" targetFramework="4.6.2" />
<httpRuntime targetFramework="4.6.1" maxRequestLength="102428" />
</system.web>
...
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="102428800" />
</requestFiltering>
</security>
我自己发现的问题, 问题是我的项目中使用的 RestSharp 版本, 我使用的是最新的 106.6.10,这个版本上传失败。 然后我尝试逐步降级, 并且使用 RestSharp 到版本 106.4.2(及更低版本),上传工作没有错误!