2012-08-01 41 views
1

我正在嘗試做什麼 - 當用戶單擊鏈接時,從RavenDB獲取附件並自動爲用戶打開它。在ASP.NET MVC的用戶界面中爲用戶打開附件

單擊鏈接 - 我通過view/ajax將附件的附件標識(已保存在RavenDB中)傳遞給控制器​​方法。一旦進入控制器方法,我想獲取附件並顯示/打開用戶的附件。

查看:

<a href onclick="GetAttachment('<%= Model.Id %>');"> See attachment </a> 

阿賈克斯/ JS

function GetAttachment(id) { 

$.ajax({ 
    type: 'POST', 
    url: '/ControllerName/GetMethod', 
    data: id, 
    contentType: 'application/json; charset=utf-8', 
    success: function (msg) { 
     if (msg.Success) {    
     } 
     else {    
     } 
    }  
    }); 
} 

控制器:

public string GetMethod(string id) 
    {   
     var dbCommands = session.Advanced.DatabaseCommands; 
     var attachment = dbCommands.GetAttachment(id); 
     //Here - How do I use above lines of code to get hold of the 
     // attachment and open it for the user. 
    } 

謝謝你的幫助。

+0

什麼是附件類型?它是流還是其他?在所有情況下,您需要從Action中返回FileResult。 – 2012-08-01 14:41:24

+0

保存其轉換成流..並保存爲字節信息..它可以是任何類型的文件.. .pdf或.doc等 – ZVenue 2012-08-01 14:43:34

回答

1

像這樣: 控制器:

public FileResult GetMethod(string id) 
{   
    var name = "filename.extension"; 
    var dbCommands = session.Advanced.DatabaseCommands; 
    var attachment = dbCommands.GetAttachment(id); 
    var stream = new MemoryStream(attachment.Data); 
    return new FileStreamResult(stream, name); 
} 

檢視:

@ Html.ActionLink( 「見附件」, 「GetMethod」, 「ControllerName」,新的{ID = ModelId} ,NULL)

你需要從數據庫中獲取文件的MemoryStream或者您的文件轉移到MemoryStream的

+0

MemoryStream附件= dbCommands.GetAttachment(id);將不會作爲「dbCommands.GetAttachment(id)」不是內存類型..它是raven.abstractions.data.attachment類型.. – ZVenue 2012-08-01 16:59:05

+0

我不知道你從數據庫中得到什麼。但你需要將它傳遞到MemoryStream傳遞給FileStreamResult – 2012-08-01 17:04:27

+1

我更新答案將您的附件轉移到流 – 2012-08-01 17:14:12

3

RavenDB Attachment類具有Data類型Func<Stream>的屬性,該屬性是thunk到附件的字節流。該流是您需要在您的MVC控制器中返回的內容:

public FileResult GetMethod(string id) 
{   
    var dbCommands = session.Advanced.DatabaseCommands; 
    var attachment = dbCommands.GetAttachment(id); 
    return File(attachment.Data(), "fileName"); 
} 
+0

錯誤..貌似。 「文件是一種類型,用作變量」... – ZVenue 2012-08-02 13:03:03

+0

此方法應該在您的MVC控制器中。 – eulerfx 2012-08-02 16:29:26