6

首先,这是我的代码:

private Shoe ProcessForm(Shoe shoe, HttpPostedFileBase image)
{
    try
    {
        shoe.Slug = CMSHelper.SanitizeTitle(shoe.Name);
        shoe.LastModification = DateTime.Now;

        if ((image != null) && (image.ContentLength > 0))
        {
            string fileName = String.Concat(shoe.ShoeId, Path.GetExtension(image.FileName));
            shoe.Image = fileName;

            string filePath = Path.Combine(Server.MapPath(shoe.ImagePath), fileName);
            image.SaveAs(filePath);
        }
    }
    catch (Exception e)
    {
        throw e;
    }

    return shoe;
}

在本地,此代码工作正常。目录的权限很好。它之前在其他服务器上随机运行过(我在测试 VPS 提供商时在 4 或 5 台不同的服务器上测试了此代码)。

但是,如果我尝试从家用计算机运行它,一切正常,数据库中保存了一个文件名,但没有上传任何文件。而且没有例外!!!

我一直在尝试解决这个问题将近三天和这么多无用的时间,请帮助我......我只是不明白这有什么问题......

4

7 回答 7

5

你的视图模型是什么?首先将 (Shoe shoe, HttpPostedFileBase image) 替换为 (FormCollection formCollection)。在其上放置一个断点以查看您正在获取所有提交的值。如果你这样做了,那么模型绑定就会出现问题,我们需要解决这个问题。

编辑

你能在上面放一个断点吗

image.SaveAs(filePath); 

添加对 fileName 和 filePath 变量的监视。我认为服务器路径不是您所期望的,或者您可能正在一起查找错误的文件夹。告诉我们这些变量的值是什么。还要确保你过去时不会抛出异常image.SaveAs(filePath);

于 2011-10-05T08:57:48.200 回答
4

我终于做了一个很好的解决方法。我什至问过我的工作,每个人都说完全没有问题。所以把它搞砸,这就是我所做的:

而不是调用 .SaveAs() 我做了一个方法:

public static void WriteFileFromStream(Stream stream, string toFile)
{
    using (FileStream fileToSave = new FileStream(toFile, FileMode.Create))
    {
        stream.CopyTo(fileToSave);
    }
}

我这样称呼它:

CMSHelper.WriteFileFromStream(image.InputStream, filePath);

就是这样。

于 2011-10-19T04:20:22.980 回答
2

image.FileName包含路径数据并由

Path.Combine(Server.MapPath(shoe.ImagePath), fileName)

尝试类似:

string pathForSaving = Server.MapPath("~/Upload/Images");
string uploadFileName = System.IO.Path.GetFileName(image.FileName);
string uploadFilePathAndName = Path.Combine(pathForSaving, uploadFileName);
image.SaveAs(uploadFilePathAndName);
于 2013-12-31T06:47:42.117 回答
0

确保您在表单中使用enctype ="multipart/form-data"

http://www.prideparrot.com/blog/archive/2012/8/uploading_and_returning_files

于 2013-07-11T21:22:11.797 回答
0

您是否检查过您是否有多个 Web 服务器?也许像负载均衡器。它可能不会引发异常,因为实际上没有异常,并且文件确实存在于某处,只是不在您认为它所在的服务器上。只是一个想法(它以前发生在我身上)。

于 2011-10-24T03:45:27.447 回答
0

你是如何设置 shoe.ImagePath 的?您的问题感觉就像 Server.MapPath 正在返回一个您不期望的值。

于 2011-10-17T13:25:40.487 回答
0

我也遇到了这个帖子上发布的相同问题,在尝试上传文件几次后,我刷新了文件所在的文件夹,最后我在那里看到了它们。不知道为什么它在第一次刷新后第一次没有出现,但它可能与刷新文件夹有关。我在 Visual Studio 中进行了刷新,并且还打开了“显示所有文件”按钮。

于 2016-03-29T17:07:24.340 回答