You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Xamarin调用文件上传服务失败,附C# WebAPI 2实现代码

实现文件上传的ASP.NET Web API 2接口

下面是一个完整的异步文件上传Web API接口实现,包含基础的文件校验、响应处理,还补充了你代码中省略的关键逻辑:

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Web;
using System.Web.Http;
using Newtonsoft.Json;
using System.IO;
using System.Text;
using System.Threading.Tasks;

public async Task<HttpResponseMessage> PostAttachments() 
{ 
    Dictionary<string, object> responseData = new Dictionary<string, object>(); 
    var httpRequest = HttpContext.Current.Request; 

    // 处理多文件上传场景
    foreach (string fileKey in httpRequest.Files) 
    { 
        var postedFile = httpRequest.Files[fileKey]; 

        if (postedFile != null && postedFile.ContentLength > 0)
        {
            // 示例:设置文件保存路径(确保Uploads目录存在,否则会报错)
            var uploadDir = HttpContext.Current.Server.MapPath("~/Uploads");
            Directory.CreateDirectory(uploadDir);
            var savePath = Path.Combine(uploadDir, postedFile.FileName);
            
            // 保存文件到服务器
            postedFile.SaveAs(savePath);

            // 准备响应数据
            responseData.Add($"File_{fileKey}_Name", postedFile.FileName);
            responseData.Add($"File_{fileKey}_Size", $"{postedFile.ContentLength / 1024} KB");
            responseData.Add($"File_{fileKey}_Status", "Uploaded successfully");
        }
        else
        {
            responseData.Add($"File_{fileKey}_Status", "File is empty or not provided");
        }
    }

    // 根据上传结果返回对应响应
    if (responseData.Count == 0)
    {
        responseData.Add("Status", "No files found in request");
        return Request.CreateResponse(HttpStatusCode.BadRequest, responseData);
    }
    else
    {
        responseData.Add("Overall_Status", "Upload process completed");
        return Request.CreateResponse(HttpStatusCode.Created, responseData);
    }
}

关键细节说明:

  • 接口采用异步实现,符合Web API性能优化的最佳实践
  • 支持多文件上传,通过遍历httpRequest.Files处理所有上传的文件
  • 加入了目录自动创建逻辑,避免因上传目录不存在导致的保存失败
  • 返回结构化的JSON响应,方便客户端解析上传结果
  • 可扩展的优化点:
    • 添加文件类型校验(比如仅允许jpg、pdf、docx等指定格式)
    • 设置最大文件大小限制,防止超大文件占用服务器资源
    • 对文件名进行重命名处理,避免同名文件覆盖
    • 加入异常捕获逻辑,处理文件保存时的意外错误

内容的提问来源于stack exchange,提问作者Jitendra Pancholi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:24:18