2016-06-21 4 views
3

필드 유형이 인 SQL 테이블에 이미지 데이터가 저장됩니다. varbinary (최대) 이미지 콘텐츠 형식도 저장합니다.ASP.NET 코어 MVC, 데이터베이스에서 파일 가져 오기 및 이미지로 렌더링

Microsoft ASP.NET Core MVC 및 Dapper를 사용하여 데이터베이스에서 파일을 다시 가져 와서 이미지로 렌더링하려고합니다.

<img src="@fileExtensions.GetFile(content.FileID)" /> 

나는 무엇입니까 : 나는 구문의 종류이 전화

public FileStreamResult GetFile(string FileID) 
{ 
    return GetFile(new Guid(FileID)); 
} 

public FileStreamResult GetFile(Guid FileID) 
{ 
    using (SqlConnection connection = new SqlConnection(connectionString)) 
    { 
     connection.Open(); 
     DynamicParameters dynamicParameters = new DynamicParameters(); 
     dynamicParameters.Add(@"ID", FileID); 
     FileModel result = connection.Query<FileModel>("GetFile", dynamicParameters, commandType: CommandType.StoredProcedure).FirstOrDefault(); 
     Stream stream = new MemoryStream(result.FileData); 
     return new FileStreamResult(stream, result.FileType); 
    } 
} 

:

using System; 

namespace Brand.Models 
{ 
    public class FileModel 
    { 
     public Guid ID { get; set; } 
     public string FileName { get; set; } 
     public string FileType { get; set; } 
     public byte[] FileData { get; set; } 
     public int FileLength { get; set; } 
     public long Version { get; set; } 
     public string FileSource { get; set; } 
     public DateTime Created { get; set; } 

     public FileModel() 
     { 
      FileLength = 0; 
      Version = 1; 
      Created = DateTime.Now; 
     } 
    } 
} 

이 내 기능은 다음과 같습니다

FileModel입니다 내가 이걸 시도 할 때 404 응답, 내가 분명히 뭔가 잘못되었다. 이것을 구현하고 있습니다.

답변

7

아래 코드는 머리 꼭대기에서 약간 벗어남으로 약간의 개조가 필요할 수도 있지만 기본적인 아이디어를 줄 것입니다.

거기에 당신의 방법을 새로운 컨트롤러를 만들고 넣어 : 다음

public ImageController : Controller 
{ 
    public FileStreamResult GetFile(string FileID) 
    { 
     return GetFile(new Guid(FileID)); 
    } 

    public FileStreamResult GetFile(Guid FileID) 
    { 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 
      DynamicParameters dynamicParameters = new DynamicParameters(); 
      dynamicParameters.Add(@"ID", FileID); 
      FileModel result = connection.Query<FileModel>("GetFile", dynamicParameters, commandType: CommandType.StoredProcedure).FirstOrDefault(); 
      Stream stream = new MemoryStream(result.FileData); 
      return new FileStreamResult(stream, result.FileType); 
     } 
    } 
} 

를 마크 업에, 참조 컨트롤러 :

<img src="@Url.Action("GetFile", "Image", new {FileId = content.FileID})" /> 
2

@ fileExtensions.GetFile (content.FileID)는 실제로 FileStreamResult를 반환하므로 HTML 내에서 렌더링 할 수 없으며 아마도 FileStreamResult.ToString()을 반환합니다.

렌더링 된 HTML을 확인하십시오!

대신에 FileStreamResult를 반환하는 컨트롤러에서 작업을 트리거하는 URL을 렌더링하는 함수를 작성하면됩니다.

또 다른 방법은 이미지를 원하는대로 포함시키는 것입니다. Convert image path to base64 string을하지만, 파일 경로에서 읽는 대신 메모리 스트림을 사용

<img alt="Embedded Image" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIA..." /> 

그런 다음 당신은이 게시물에 같은 이미지를 인코딩해야합니다.