1

我正在上传图片:

[HttpPost]
public ActionResult Create(PlaceViewModel model)
{
    if (ModelState.IsValid)
    {
        string fileName = Guid.NewGuid().ToString() + ".jpg";
        string serverPath = Server.MapPath("~");
        string imagesPath = serverPath + "Content\\Uploads\\";
        string thumbPath = imagesPath + "Thumb\\";
        string fullPath = imagesPath + "Full\\";
        ImageModel.ResizeAndSave(thumbPath, fileName, model.ImageUploaded.InputStream, 100, true);
        ImageModel.ResizeAndSave(fullPath, fileName, model.ImageUploaded.InputStream, 600, true);

        model.Image = fileName;

        var place = new Place();
        model.ConvertToData(place);

        _placeRepository.Add(place);
        _placeRepository.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(model);
}

文件上传并物理存在于磁盘中

我从 html 调用图像:

<img height="100px" src="/Content/Uploads/Thumb/833c4384-884d-4250-982c-d5df0fa875ef.jpg" width="100px"/>

但是我没有看到这个图像。

如果我打电话localhost:23354/Content/Uploads/Thumb/833c4384-884d-4250-982c-d5df0fa875ef.jpg我有错误:

无法找到该资源。说明:HTTP 404。您要查找的资源(或其依赖项之一)可能已被删除、名称已更改或暂时不可用。请查看以下 URL 并确保其拼写正确。

请求的 URL:/Content/Uploads/Thumb/833c4384-884d-4250-982c-d5df0fa875ef.jpg

我究竟做错了什么?

4

2 回答 2

2

如果您在 IIS 中的虚拟目录中运行,则应预先指定虚拟目录。你不应该在你的视图中硬编码 url。始终使用助手:

<img height="100px" src="@Url.Content("~/Content/Uploads/Thumb/833c4384-884d-4250-982c-d5df0fa875ef.jpg")" width="100px"/>

现在,当您在没有虚拟目录的情况下在本地运行时,助手将生成:

/Content/Uploads/Thumb/833c4384-884d-4250-982c-d5df0fa875ef.jpg

当您在 IIS 中的虚拟目录中上传应用程序时,助手将再次生成正确的 url:

/AppName/Content/Uploads/Thumb/833c4384-884d-4250-982c-d5df0fa875ef.jpg

如您所见,您永远不应该对 url 进行硬编码。同样代表您的 javascript 文件中的 url。在 ASP.NET MVC 应用程序中处理 url 时始终使用帮助程序。

于 2012-12-01T08:52:04.387 回答
0

我松了。

图像保存ImageModel.ResizeAndSave并附加扩展名“.jpg”

newImage.Save(savePath + fileName + ".jpg", ImageFormat.Jpeg);

原来文件是filename.jpg.jpeg

于 2012-12-01T09:33:28.550 回答