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

C# WinForms图片上传Web服务器遇问题,求助解决方案及服务器端代码位置

解决方案:WinForms图片上传至Web服务器的问题修复

一、解决文件被占用的IOException错误

原代码中pictureBox1.Image = new Bitmap(ofd.FileName)会持续锁定原图片文件,导致后续File.Open无法访问。修改图片加载逻辑,通过内存流中转,避免锁定原文件:

// 替换原有的pictureBox1.Image = new Bitmap(ofd.FileName);
using (var fs = File.OpenRead(ofd.FileName))
{
    using (var ms = new MemoryStream())
    {
        fs.CopyTo(ms);
        ms.Position = 0;
        pictureBox1.Image = new Bitmap(ms);
    }
}

二、修复上传失败问题及客户端代码优化

上传失败大概率是客户端请求配置错误,同时需确保请求指向服务器端处理上传的接口(而非静态文件目录)。优化后的上传代码:

// 替换原有的上传逻辑
using (var fileStream = File.OpenRead(ofd.FileName))
{
    // 注意:此处URL需指向服务器端的上传处理接口,而非直接指向Images目录
    var client = new RestClient("https://blabla.com/api/upload");
    var request = new RestRequest(Method.Post);
    // 直接使用文件流上传,无需中转内存流,减少内存占用
    request.AddFile("file", fileStream, ofd.FileName);
    request.AlwaysMultipartFormData = true;
    
    var response = await client.ExecuteAsync(request);
    if (response.StatusCode == System.Net.HttpStatusCode.OK)
    {
        dynamic json = JsonConvert.DeserializeObject(response.Content);
        string fileName = json.fileName;
        MessageBox.Show("Success uploading image");
    }
    else
    {
        // 可打印响应内容排查错误
        MessageBox.Show($"Failed uploading image: {response.Content}");
    }
}

三、服务器端代码实现与部署位置

以ASP.NET Core为例,需编写接收文件的API接口:

  1. 在服务器项目的Controllers目录下创建UploadController:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System.IO;

namespace YourServerProject.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class UploadController : ControllerBase
    {
        private readonly IWebHostEnvironment _env;

        public UploadController(IWebHostEnvironment env)
        {
            _env = env;
        }

        [HttpPost]
        public async Task<IActionResult> Post(IFormFile file)
        {
            if (file == null || file.Length == 0)
                return BadRequest("No file uploaded.");

            // 定义文件保存路径:指向网站静态文件目录下的Images文件夹
            var uploadsFolder = Path.Combine(_env.WebRootPath, "Images");
            if (!Directory.Exists(uploadsFolder))
                Directory.CreateDirectory(uploadsFolder);

            // 生成唯一文件名避免覆盖
            var fileName = Guid.NewGuid().ToString() + Path.GetExtension(file.FileName);
            var filePath = Path.Combine(uploadsFolder, fileName);

            using (var stream = new FileStream(filePath, FileMode.Create))
            {
                await file.CopyToAsync(stream);
            }

            // 返回文件名给客户端
            return Ok(new { fileName = fileName });
        }
    }
}
  1. 确保服务器的wwwroot/Images目录存在且具备写入权限;客户端请求URL需对应接口路由(如示例中的https://blabla.com/api/upload)。

若使用其他服务器技术(如PHP),需在网站根目录下创建上传处理脚本(如upload.php),脚本负责接收file字段的文件并保存至Images目录,客户端请求URL指向该脚本即可。

内容的提问来源于stack exchange,提问作者MUHAMMED DÖNMEZ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:55:04