Папка загруженных изображений ASP.NET MVC недоступна после развертывания - PullRequest
0 голосов
/ 08 февраля 2012

Я могу перейти непосредственно к этому изображению на сервере разработки, и оно отображается.

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 - потому что папка Uploads и ее содержимое не были скопированы в папку развернутого приложения. Путь не существовал. Наверное, я предположил, что это не будет проблемой, поскольку база данных приложения не была проблемой.

У меня была вторая проблема, связанная с типом mime, потому что в этих jpeg нет расширений, только имя guid из swfupload. Я создал MIME-тип для . в IIS, то есть image/jpeg и отображаемых изображений. Я полагаю, я должен просто добавить расширение к именам файлов.

1 Ответ

1 голос
/ 08 февраля 2012

Поскольку я работал с 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 и расширением.

...