Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
部署后无法访问ASP.NET MVC上载的图像文件夹_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Deployment_Asp.net Mvc Routing - Fatal编程技术网

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

部署后无法访问ASP.NET MVC上载的图像文件夹,asp.net,asp.net-mvc,asp.net-mvc-3,deployment,asp.net-mvc-routing,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

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

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
,并显示图像。我想我应该把扩展名添加到文件名中。

因为我在使用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" };
    }
以及我的IDiskStore类:

using System;
using System.Web;

namespace CAA.Utility.IO
{
    public interface IFileStore
    {
        string SaveUploadedFile(HttpPostedFileBase fileBase);
    }
}
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和扩展名的字符串。

您不想保留文件扩展名的原因是什么?我问这个问题是因为mime类型catch all for image/jpeg并不理想。我只是想知道是否有特定的原因,或者是什么原因导致你不得不这样做。@Splash-X我同意,这听起来像是一场即将发生的灾难。这些文件没有扩展名,因为我不知道如何从我正在关注的swfupload的在线示例中获取它。我宁愿保留扩展,而放弃变通方法。我还需要学习swfupload和.net文件处理,因为我对这方面还不熟悉。请查看我发布的答案,它提供了一些方法示例,可以从swfupload接收文件集合(如果使用多重上载)并传回文件名。碰巧我的代码返回一个字符串,该字符串是一个具有文件扩展名的GUID。我想这可能会为您节省一些时间。这很有帮助,但我觉得这种
FileStore
方法有些奇怪。也许这只是一个让我讨厌的命名问题。最后,我在action方法中用两行代码替换了原来的代码。将来,当我使用拖放功能使我的应用程序中的上载工作流更加健壮时,我将在这里引用您的示例。谢谢顺便说一句,由于闪存的原因,swfupload不适用于windows身份验证。文件存储允许您轻松更改文件的保存位置。它可以是一个磁盘、一个数据库、内存等。要使用SWFUpload,您需要允许匿名访问处理您上传的任何操作。这只是使用Flash对象的一个限制。