在 MAUI 应用程序中使用 HttpClient 上传大文件的问题 – 收到错误请求 (400)

问题描述 投票:0回答:1

我在 MAUI 应用程序中使用 HttpClient 上传大文件(超过几 MB)时遇到问题。虽然相同的服务器和客户端代码在其他环境中工作得很好,但当我从模拟器或 iOS 设备上运行的 MAUI 应用程序发送较大的文件时,我遇到了 400 Bad Request 错误。

我尝试过的

  1. 工作场景:
  • Windows 控制台应用程序:成功上传大文件。
  • Mac 上的 Swift 应用程序:成功上传大文件。
  • Postman:成功上传大文件到服务器。
  1. 有问题的场景:
  • MAUI 模拟器:上传大于约 700 字节的文件失败,并显示 400 错误请求。
  • Xamarin iOS 应用程序:与较大文件的 400 Bad Request 类似的问题。

配置详情:

  • HttpClient初始化:
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>

故障排除步骤:

  • 配置检查:验证 NSUrlSessionConfiguration 设置是否适合大文件上传。
  • 文件大小测试:成功上传小文件,但遇到大于约 1MB 的文件问题。

问题

  1. 在 MAUI 应用程序中使用 HttpClient 时,可能会导致 400 Bad Request 错误(特别是对于较大文件)?
  2. 我应该调整 NSUrlSessionHandler 或 NSUrlSessionConfiguration 中的特定配置或设置来处理大文件上传吗?
  3. 是否存在任何其他环境因素或模拟器特定问题可能会影响上传较大文件的能力?

任何见解或建议将不胜感激!

c# ios xamarin file-upload httpclient
1个回答
0
投票

我们遇到了一个问题,即上传大于 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% 来减小图像的大小。这确保即使文件限制增加,图像在上传之前仍会得到优化。

参考:

我们发现这些有用的资源可以指导我们解决问题:

    堆栈溢出线程
  • Spring Boot 多部分属性文档
© www.soinside.com 2019 - 2024. All rights reserved.