2017-12-28 14 views
0

ASP.NET MVC 및 SQL Server 2016 사용. SQL Server에 이진 데이터로 저장된 첨부 파일이 있습니다. 나는 HTML 페이지에서 하이퍼 링크로,이 첨부 파일 (이름)의 목록을 표시 할 필요가ASP.NET MVC 이진 데이터의 첨부 파일 목록

attachment_ID | attachment_GUID | attachment_data | attachment_name| 
    --------------|------------------|-----------------|----------------| 
     211  | A893C2Z1-4C0 | 0x255044462... | file1.doc | 
     212  | A893C2R5-4F0 | 0x255044455... | file5.pdf | 

: 같은 데이터

표 보인다. 첨부 파일 이름을 클릭하면 다운로드 프로세스가 시작됩니다.

ASP.NET MVC 컨트롤러에 대한 도움이 필요합니다.

내가 파일을 직접 다운로드 컨트롤러가 :

using System; 
using System.Data.SqlClient; 
using System.IO; 
using System.Web; 
using System.Web.Mvc; 
using System.Collections.Generic; 

namespace Project.SERVER.Controllers 
{ 
    public class AttachmenttoHTMLController : Controller 
    { 
     #region View attachments 
     [HttpGet] 
     public ActionResult Get() 
     { 
      SqlConnection connection = Project.SERVER.Classes.INT_DataBase.getConnection(); 
      SqlCommand command = new SqlCommand("SELECT * FROM AllAttachments WHERE document_GUID='F3A2AC32-D98D'", connection); 
      command.Dispose(); 

      SqlDataAdapter sqlDtAdptr = new SqlDataAdapter(command); 
      System.Data.DataTable result = new System.Data.DataTable(); 
      result.Dispose(); 
      sqlDtAdptr.Fill(result); 
      sqlDtAdptr.Dispose(); 
      connection.Dispose(); 
      connection.Close(); 

      if (result.Rows.Count > 0 && !System.Convert.IsDBNull(result.Rows[0]["attachment_data"])) 
      { 
       byte[] file = (byte[])result.Rows[0]["attachment_data"]; 
       Response.ContentType = result.Rows[0]["attachment_contentType"].ToString(); 

       return File(file, Response.ContentType, result.Rows[0]["attachment_fileName"].ToString()); 
      } 
      else return new EmptyResult(); 
     } 
     #endregion 
    } 
} 
내가 클릭하면 다운로드 할 수있는 옵션이 첨부 파일 목록에 대한 컨트롤러를 달성하기 위해 코드에 추가해야합니까

?

답변

1

먼저 이진 데이터를 이미지 형식으로 디렉터리 프로젝트에 저장해야합니다.

사용 FileResult

HTML :

<div> 
    @Html.ActionLink("Download", "Download", "Home"); 
</div> 

HomeController :

public FileResult Download() 
    { 
     String path = HostingEnvironment.ApplicationPhysicalPath + "Image\\Capture.PNG"; 
     string fname= Path.GetFileName(path); 
     byte[] fileBytes = System.IO.File.ReadAllBytes(path); 
     string fileName = fname; 
     return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 

    } 

당신이 모델의 목록을 가지고 있다고 가정

List<Attachment> lst = new List<Attachment>(); 

이 목록은 데이터베이스의 데이터 내용으로 프로젝트 폴더에 imageformat을 저장합니다.

위의 코드는 여기에 파일 이름이 id 인 .PNG 또는 any라는 바이트를 저장해야합니다. html 목적으로 lst.idlst.filename을 추가하십시오.

public FileResult Download(int?id) 
     { 
      String path = HostingEnvironment.ApplicationPhysicalPath + "Image\\Capture.PNG"; 
      string fname= Path.GetFileName(path); 
      byte[] fileBytes = System.IO.File.ReadAllBytes(path); 
      string fileName = fname; 
      return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); 

     } 

id의 목적은 모든 사용자 클릭에 대해 프로젝트 디렉토리에있는 파일을 찾습니다 :

<table> 
@{ 
      if (Models.GetAttachment.lst.Count > 0) 
      { 
        for (int m = 0; m < Models.GetAttachment.lst.Count; m++) 
       { 
       <tr> 

        <td> 
         @Html.ActionLink("Download", "Download", new { id = Models.GetAttachment.lst.Coun[m].id }) 
        </td> 
       </tr> 
       } 
      } 


    } 
</table> 

HomeController id으로 :

public class Attachment 
     { 
      public int id { get; set; } 
      public string filename { get; set; } 
     } 

귀하의 HTML처럼 보인다.

+0

'Capture.PNG'가 프로젝트 디렉토리의'Image' 폴더 안에 있다고 가정하십시오. –

+0

DB에서 많은 파일이 있다면 html로 루프를 사용하여 추가하여 각 파일마다 링크를 만들 수 있습니다. –

+0

알아 내고 재현하는 데 시간이 걸렸습니다. 이 솔루션이 작동합니다. 도움을 요청 해주십시오! – Dmitry