在 MVC3 中的控件方法中返回文件
本文关键字:返回 文件 方法 MVC3 控件 | 更新日期: 2023-09-27 18:19:48
我有一个上传管理器,当用户调用我的控件的特殊方法时,我想返回一个文件,如下所示:
www.website.com/upload/getfile/?fileID=100
我该怎么做?我想知道如何返回文件!
我找到了答案,并在下面编写了示例代码:
public FilePathResult GetFile(string Name)
{
FilePathResult s = new FilePathResult(@"C:/"+Name, "File");
Response.Headers.Clear();
return s;
}
但是现在有一个问题。如果我将File
用于我的内容类型,是否有任何问题。因为我不知道。
创建一个名为 uploadController
的控制器,其中包含一个名为 getfile
的具有参数的操作。
那么上面的网址可以改成
www.website.com/upload/getfile/100
更新:
将操作的返回类型更改为FileResult
有关完整的答案,请查看我的部分代码库:
//Attachment Class
public class Attachment
{
#region Properties
public virtual Guid AttachmentId { get; set; }
public virtual int? ContentLength { get; set; }
public virtual string ContentType { get; set; }
public virtual byte[] Contents { get; set; }
public virtual DateTime? DateAdded { get; set; }
public virtual string FileName { get; set; }
public virtual string Title { get; set; }
#endregion
}
public class AttachmentController : Controller
{
IAttachmentService attachmentService;
public AttachmentController(IAttachmentService attachmentService)
{
this.attachmentService = attachmentService;
}
public ActionResult Index(Guid id)
{
var attachment = this.attachmentService.GetById(id);
return attachment.IsNull() ? null : this.File(attachment.Contents, attachment.ContentType,attachment.FileName);
}
}
public class AttachmentModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
HttpRequestBase httpRequestBase = controllerContext.RequestContext.HttpContext.Request;
HttpPostedFileBase @base = httpRequestBase.Files[bindingContext.ModelName];
var converter = new FileConverter();
Attachment attachment = converter.Convert(
new ResolutionContext(
new TypeMap(new TypeInfo(typeof(HttpPostedFileWrapper)), new TypeInfo(typeof(Attachment))),
@base,
typeof(HttpPostedFileWrapper),
typeof(Attachment)));
}
return attachment;
}
}
public class MvcApplication : HttpApplication
{
protected void Application_Start()
{
ModelBinders.Binders[typeof(Attachment)] = new AttachmentModelBinder();
}
}
听起来你想返回一个文件结果 http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx
你能试试这个吗
public void getFile(fileId id)
{
FileInfo fileInfo = GetFileInfo(id); //Your function, which returns File Info for the Id
Response.ClearContent();
Response.ClearHeaders();
Response.AddHeader("Content-Length", fileInfo.Length.ToString());
Response.TransmitFile(fileInfo.FullName);
Response.ContentType = "CONTENT TYPE";
Response.Flush();
}
我正在使用它从服务器获取MP3文件。
希望这有帮助。