部署后,ASP.NET MVC上传的图像文件夹无法访问

时间:2012-02-07 22:55:45

标签: asp.net asp.net-mvc asp.net-mvc-3 deployment asp.net-mvc-routing

我可以在开发服务器上直接导航到此图像并显示它。

http://localhost:51122/Uploads/0a2234e6-71c2-4ca4-83b9-4bf9510f25bc

但是在发布后我得到了404

http://localhost/hts/Uploads/0a2234e6-71c2-4ca4-83b9-4bf9510f25bc  

Version info:
Microsoft .NET Framework Version:4.0.30319;
ASP.NET Version:4.0.30319.272

如果是MVC路由问题那么为什么它在开发中工作?

编辑: LOL - 因为上传文件夹及其内容未复制到已部署应用的文件夹中。路径不存在。我想我认为这不是问题,因为应用程序的数据库不是问题。

我有关于mime类型的第二个问题,因为这些jpeg上没有扩展名,只是来自swfupload的guid名称。我在IIS中为.创建了一个mime类型image/jpeg并显示了图像。我想我应该将扩展名添加到文件名中。

1 个答案:

答案 0 :(得分:1)

因为在我想到之前我已经使用过SWFUpload,我会给你一些我用于ActionResult的代码。下面是我使用的一些代码。 “CAA”是我的项目命名空间,因此“CAA.Utility.IO”是我构建的一些帮助程序类的命名空间,包含在下面。

    public ActionResult Index()
    {
        if (Request.Files.Count != 0)
        {

            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < Request.Files.Count; ++i)
            {
                CAA.Utility.IO.IFileStore _fileStore = new CAA.Utility.IO.DiskFileStore(Server.MapPath("~/assets/uploads/temp"));
                sb.Append(_fileStore.SaveUploadedFile(Request.Files[i]));
            }
            return new ContentResult() { Content = sb.ToString(), ContentType = "text/html" };

        }
        else
            return new ContentResult() { Content = "", ContentType = "text/html" };
    }

我的IFileStore课程:

using System;
using System.Web;

namespace CAA.Utility.IO
{
    public interface IFileStore
    {
        string SaveUploadedFile(HttpPostedFileBase fileBase);
    }
}

我的IDiskStore类:

using System;
using System.Web;
using System.IO;
using System.Web.Hosting;

namespace CAA.Utility.IO
{
    public class DiskFileStore : IFileStore
    {
        public DiskFileStore() { }
        public DiskFileStore(string UploadFolder)
        {
            this._uploadsFolder = UploadFolder;
        }

        public string UploadFolder
        {
            get
            {
                return _uploadsFolder;
            }
            set
            {
                _uploadsFolder = value;
            }

        }
        private string _uploadsFolder = HostingEnvironment.MapPath("~/assets/uploads/temp");

        public string SaveUploadedFile(HttpPostedFileBase fileBase)
        {
            int lastPeriod = fileBase.FileName.LastIndexOf(".");
            string fileExtension = "";
            if (lastPeriod != -1)
            {
                fileExtension = fileBase.FileName.Substring(lastPeriod);
            }

            var identifier = Guid.NewGuid();
            fileBase.SaveAs(GetDiskLocation(identifier, fileExtension));
            return identifier.ToString() + fileExtension;
        }

        private string GetDiskLocation(Guid identifier, string FileExtension)
        {
            return Path.Combine(UploadFolder, identifier.ToString() + FileExtension);
        }
    }
}

您会注意到,在创建DiskFileStore的实例时,它会采用您要将文件保存到的路径。如果未指定,则它具有默认文件位置。该方法将返回一个带有GUID和扩展名的字符串。