我在 MAUI 应用程序中使用 HttpClient 上传大文件(超过几 MB)时遇到问题。虽然相同的服务器和客户端代码在其他环境中工作得很好,但当我从模拟器或 iOS 设备上运行的 MAUI 应用程序发送较大的文件时,我遇到了 400 Bad Request 错误。
我尝试过的:
配置详情:
var configuration = NSUrlSessionConfiguration.DefaultSessionConfiguration;
configuration.AllowsCellularAccess = true;
configuration.AllowsConstrainedNetworkAccess = true;
configuration.AllowsExpensiveNetworkAccess = true;
var session = new NSUrlSessionHandler(configuration);
var client = new HttpClient(session);
public async Task UploadFileAsync(string url, string filePath)
{
using var client = new HttpClient();
using var content = new MultipartFormDataContent();
var fileContent = new StreamContent(File.OpenRead(filePath));
fileContent.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
content.Add(fileContent, "file", Path.GetFileName(filePath));
var response = await client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
Console.WriteLine("Upload successful!");
}
else
{
Console.WriteLine($"Error: {response.StatusCode}");
}
}
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>mycompany.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key>
<true/>
<key>NSTemporaryExceptionMinimumTLSVersion</key>
<string>TLSv1.3</string>
</dict>
</dict>
</dict>
故障排除步骤:
问题:
任何见解或建议将不胜感激!
我们遇到了一个问题,即上传大于 1MB 的文件会导致 Spring Boot 应用程序出现“Bad Request 400”错误。经过一番调查,我们找到了解决方案,并在此分享。 解决方案:
application.properties
文件中明确配置时,Spring Boot 中的默认最大文件大小设置为 1MB。这是由 Spring Boot 的多部分属性控制的。
相关配置属性有:
spring.servlet.multipart.max-file-size
:指定上传文件允许的最大大小。默认为 1MB。
spring.servlet.multipart.max-request-size
:指定多部分/表单数据请求允许的最大大小。默认为 10MB。
spring.servlet.multipart.file-size-threshold
:指定文件将写入磁盘的大小阈值。默认为 0(立即写入磁盘)。
max-file-size
中的
max-request-size
和 application.properties
以允许上传更大的文件:spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
此外,我们还实施了一项检查,如果图像超过 2MB,我们会通过将图像的宽度或高度调整为最大 800 像素并将其质量压缩到 50% 来减小图像的大小。这确保即使文件限制增加,图像在上传之前仍会得到优化。
参考: