我可以在开发服务器上直接导航到此图像并显示它。
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
并显示了图像。我想我应该将扩展名添加到文件名中。
答案 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和扩展名的字符串。