在 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用于我的内容类型,是否有任何问题。因为我不知道。

在 MVC3 中的控件方法中返回文件

创建一个名为 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文件。

希望这有帮助。