Возврат файлов в методах элемента управления в MVC3 - PullRequest
2 голосов
/ 10 января 2012

У меня есть менеджер загрузок, и я хочу вернуть файл, когда пользователь вызвал специальный метод моего контроля, например:

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 для моего ContentType. Потому что я этого не знаю.

Ответы [ 3 ]

2 голосов
/ 10 января 2012

Создайте контроллер с именем uploadController с действием с именем getfile, у которого есть аргумент.

Тогда указанный выше URL можно изменить на

www.website.com/upload/getfile/100

UPDATE:

Изменить тип возвращаемого действия на 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();
    }
}
1 голос
/ 10 января 2012

Можете ли вы попробовать это

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 с сервера.

Надеюсь, это поможет.

1 голос
/ 10 января 2012

Похоже, вы хотите вернуть FileResult http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...