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

ASP.NET Web Forms部署服务器后图片上传报错:找不到指定文件

问题:ASP.NET Web Forms上传图片到数据库,发布到服务器后报错找不到文件

我开发了一个ASP.NET Web Forms应用程序,将上传的图片以二进制格式存储到数据库中,加载时将二进制数据转换为Base64字符串显示。在本地Visual Studio运行时一切正常,但发布到服务器后,选择文件上传时出现异常:Could not find file 'c:\windows\system32\inetsrv\download (2).jpg'。

原代码:

var ImageCode = tools.UploadFileToDatabase(file, "اخبار");
public int UploadFileToDatabase(HttpPostedFile file,string FileSubject)
{
    var extension = GetFileExtension(file.FileName);
    byte[] ByteFile = FileToByteArray(file.FileName);
    BOLAmlakFiles bOLAmlakFiles = new BOLAmlakFiles();
    var resultCode = bOLAmlakFiles.InsertFile(file.FileName, ByteFile, FileSubject,
                extension);
    return resultCode;
}
public byte[] FileToByteArray(string fileName)
{
    byte[] fileContent = null;
    System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
    System.IO.BinaryReader binaryReader = new System.IO.BinaryReader(fs);
    long byteLength = new System.IO.FileInfo(fileName).Length;
    fileContent = binaryReader.ReadBytes((Int32)byteLength);
    fs.Close();
    fs.Dispose();
    binaryReader.Close();
    return fileContent;
}
public int InsertFile(string name, byte[] content, string category,
    string FileExtension)
{

    try
    {
        Files ObjTable = new Files();
        dataContext.Files.InsertOnSubmit(ObjTable);

        ObjTable.Name = name;
        ObjTable.Content = content;
        ObjTable.Category = category;
        ObjTable.CreationDate = DateTime.Now;
        ObjTable.FileExtencion = FileExtension;

        dataContext.SubmitChanges();
        dataContext.Connection.Close();
        return ObjTable.Code;

    }
    catch (Exception)
    {
        return 0;
    }
}

问题原因:

你在FileToByteArray方法中直接使用file.FileName作为文件路径创建FileStream。本地调试时,ASP.NET开发服务器能访问到本地客户端的文件路径;但部署到IIS后,file.FileName仅代表客户端上传的文件名,IIS进程会默认从服务器的c:\windows\system32\inetsrv\目录查找该文件,自然无法找到。

正确的做法是直接读取HttpPostedFile的InputStream,上传的文件已经在内存/临时存储中,无需依赖本地文件路径。

修复后的代码:

var ImageCode = tools.UploadFileToDatabase(file, "اخبار");

public int UploadFileToDatabase(HttpPostedFile file, string FileSubject)
{
    var extension = GetFileExtension(file.FileName);
    // 直接从上传文件的InputStream读取字节数组
    byte[] ByteFile = FileToByteArray(file);
    BOLAmlakFiles bOLAmlakFiles = new BOLAmlakFiles();
    var resultCode = bOLAmlakFiles.InsertFile(file.FileName, ByteFile, FileSubject, extension);
    return resultCode;
}

// 修改方法,接收HttpPostedFile参数,直接读取流
public byte[] FileToByteArray(HttpPostedFile file)
{
    byte[] fileContent = new byte[file.ContentLength];
    file.InputStream.Read(fileContent, 0, file.ContentLength);
    return fileContent;
}

public int InsertFile(string name, byte[] content, string category, string FileExtension)
{
    try
    {
        Files ObjTable = new Files();
        dataContext.Files.InsertOnSubmit(ObjTable);

        ObjTable.Name = name;
        ObjTable.Content = content;
        ObjTable.Category = category;
        ObjTable.CreationDate = DateTime.Now;
        ObjTable.FileExtencion = FileExtension;

        dataContext.SubmitChanges();
        // Linq to SQL会自动管理数据库连接,无需手动关闭
        // dataContext.Connection.Close(); 移除该行
        return ObjTable.Code;
    }
    catch (Exception)
    {
        return 0;
    }
}

额外注意:

  • 移除dataContext.Connection.Close(),Linq to SQL会自动处理连接的打开与关闭,手动关闭可能引发后续数据库操作异常。
  • 使用InputStream读取内容的方式,适配本地调试和服务器部署两种场景,避免路径依赖问题。

内容的提问来源于stack exchange,提问作者PEDRAM POURHAKIM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:43:25