2013-02-27 2 views
0

데이터베이스에서 이미지를 보여 주려고했지만 많은 예제를 발견했으나 아무런 효과가 없었습니다. 이미지가 보이지 않았습니다. 마지막 예는 다음과 같습니다. http://www.codeproject.com/Tips/445876/Auto-bind-byte-to-asp-Image이미지 태그의 디스플레이 이미지 바이트() 문제

나는 완벽하게 예제를 이해하지만 이미지는 여전히 표시되지 않습니다.

누군가이 문제와 관련하여 도움이 필요합니까?

요약하면 HTML5 드래그 & 파일을 사용하고 있습니다. FormData 객체의 XMLHttpRequest를 통해 파일을 보냅니다. 하나의 핸들러는이 파일들을 byte()로 가져 와서 SQL DataBase에 저장합니다.

클라이언트 코드 :

$("#btnUploadFile").click(function() { 
    if (files.length <= 0) { 
     alert("Debe seleccionar algún fichero para subirlo."); 
    } else { 
     var expID = $("#ContentPlaceHolder1_hfExpId").val(); 
     var formData = new FormData(); 
     for (var i = 0; i < files.length; i++) { 
      alert(files[i].name); 
      formData.append('file', files[i]); 
     } 
     var xhr = new XMLHttpRequest(); 
     xhr.open('POST', "FileHandler.ashx", true); 
     xhr.overrideMimeType('text/plain; charset=x-user-defined-binary'); 
     xhr.setRequestHeader("ExpedienteID", expID); 
     xhr.onload = function() { 
      if (xhr.status === 200) { 
       RefreshFilePanel(); 
      } else { 
       console.log('Something went terribly wrong...'); 
      } 
     }; 
     xhr.send(formData); 
    }; 

핸들 코드 :

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
    Dim documentBytes As Byte() 
    Dim lExpId As String = context.Request.Headers("ExpedienteID") 
    Dim fLenght As Integer 

    If (context.Request.Files.Count > 0) Then 
     Dim files As HttpFileCollection = context.Request.Files 

     For i = 0 To files.Count - 1 
      fLenght = files(i).ContentLength 
      documentBytes = New Byte(fLenght - 1) {} 
      context.Request.InputStream.Read(documentBytes, 0, fLenght) 
      UploadDocumentBy_ExpID(documentBytes, files(i).FileName, "Description" & lExpId.ToString, lExpId) 
     Next 
    End If 
End Sub 

더 늦게, 내가 그리드에 이미지 태그에()이 바이트를 넣어보십시오.

영문 코드 :

<asp:GridView ID="grdDocumentoByExp" runat="server" AutoGenerateColumns="false" Width="250px" DataSourceID="dtsDocumentByExpId"> 
<Columns> 
    <asp:BoundField DataField="Archivo" HeaderText="Archivo" /> 
    <asp:BoundField DataField="docId" HeaderText="docId" /> 
    <asp:BoundField DataField="Documento" HeaderText="Documento" Visible="false" /> 
    <asp:TemplateField HeaderText="Preview"> 
     <ItemTemplate> 
      <asp:Image 
       ID="imgThumb" 
       runat="server" 
       ImageUrl='<%# GetImage(Eval("Documento")) %>' 
       /> 
     </ItemTemplate> 
    </asp:TemplateField> 

</Columns> 

그리고 코드 숨김에서 함수 된 GetImage : 모든 단계에서

Public Function GetImage(image As Object) As String 
    Return "data:image/gif;base64," & Convert.ToBase64String(DirectCast(image, [Byte]())) 
End Function 

은 오류가없는,하지만 난 생각 오류는 byte() 파일 형식에 있습니다.하지만 확실하지 않습니다.

누군가 도와주세요.

내 영어 및 감사합니다.

답변

0

문제는 당신이 파일을 읽을 방법에 있습니다

context.Request.InputStream.Read(documentBytes, 0, fLenght) 

Read 방법을 사용하면 요청 바이트 수보다 적을 수 있습니다 바이트 읽기의 수를 반환합니다. 모든 바이트를 얻을 때까지 반복해야합니다.

Dim offset as Integer = 0 
Dim len as Integer 
Do While offset < fLength 
    len = context.Request.InputStream.Read(documentBytes, offset, fLenght - offset) 
    offset += len 
Loop 
+0

너무 일하지 마십시오. – amelian

+0

@AMGHoshi : GIF 이미지입니까? 최종 src는 어떤 모습입니까? – Guffa