SO와 다른 곳에서 본 모든 질문은 잠재적 인 문제로 스트림을 닫거나 닫지 않는다고 말합니다. 그게 문제가 아니라면 저장하는 디렉토리의 존재 또는 권리가 문제입니다. 그 중 어떤 것도 여기에 적용 할 지 모르겠습니다. 부분적으로 이것은 DB에 저장된 특정 tif 파일에서만 발생하며 부분적으로 코드가 서버 파일 시스템에서 파일을 저장하거나 읽지 않기 때문입니다. 하지만 제작 서버에서 개발 컴퓨터를 가리키면 tif 파일을 jpg로 변환 할 수 있습니다. 따라서 특정 파일에서만 실패하고 프로덕션 서버에서는 실패합니다.tif에서 jpg로 변환 할 때 GDI + 일반 오류가 발생했습니다.
이것은 저에게 쓰여진 오래된 도서관 출신입니다. 우리는 최근 Windows 서버의 Temp 디렉토리를 삭제했습니다. 그게 어떤 문제를 일으킬 지 모르지만 그 정보도 같이 버릴 것이라고 생각했습니다.
GDI는 ConvertFrom 줄 또는 FromStream 줄에서 실패한 내용과 그렇지 않은 내용에 따라 실패합니다.
처음에는 tif 파일이 손상된 것 같았지만 변환하기 위해 dev 컴퓨터를 사용할 수 있다고 생각했습니다. 권한 또는 디렉토리 문제는 일부 tif 파일에서 작동하기 때문에 문제가되지 않아야합니다. 나는 명백한 무엇인가를 놓치고있는 것처럼 느낀다. 시도 할 수있는 도움이나 제안을 보내 주시면 감사하겠습니다. 스택 오버플로 표시 목적을 위해 코드에 슬래시를 추가했습니다. 포맷팅이 VB 주석 마커에서 실행되지 않았습니다. '
Private Function image2jpg(ByVal dID As Integer) As System.IO.MemoryStream
Dim sql As String = "SELECT blob FROM [Database].[schema].[table] WHERE dID = @dID"
Dim params As New DB_Methods.params("@dID", dID)
Dim img = DB_Methods.sqlQuickGetUSP(sql, "ADMIN", params, False)
Dim demBits As Byte() = CType(img(0)(0), Byte())
//'new code i tried that also fails
Dim ic As System.Drawing.ImageConverter = New System.Drawing.ImageConverter()
Dim x As System.Drawing.Bitmap = ic.ConvertFrom(demBits) //'this is where GDI fails
Dim newImg = x
//'Throw New Exception(demBits.Length & " " & ms.Length)
//'Original code that was failing
//'Dim ms As System.IO.MemoryStream = New MemoryStream(demBits)
//'Dim tmpImg As System.Drawing.Image = System.Drawing.Image.FromStream(ms)'this is where GDI fails
//'Dim newImg As Drawing.Image = New Drawing.Bitmap(tmpImg, tmpImg.Width, tmpImg.Height)
Dim newStream As New MemoryStream
newImg.Save(newStream, ImageFormat.Jpeg)
Return newStream
End Function
상당히 모호합니다. 파일과 디렉토리에 대해 이야기하지만 전혀 파일이 사용되지 않습니다. 이것은 dbase에 이미지를 추가하는 코드에서 쉽게 버그 일 수 있습니다. 더 많은 디버깅이 필요합니다. 반환 된 스트림은 그대로 사용할 수 없으므로 버그를 수정하십시오. newStream.Position = 0이 필요합니다. –
@HansPassant 파일 시스템에 파일을로드하거나 저장하지 않습니다. 데이터베이스에서 varbinary (max) 열을 사용합니다. 이 열은 바이트 배열에 넣어지고 스트림에 저장됩니다. 그래서 아무 것도 디스크에 기록되지는 않을 것이라고 생각합니다. 업로드 코드에서 버그가 발생하면 내 개발 시스템도 실패 할 것으로 예상됩니다. 프로덕션 서버에서 디버깅에 대한 팁이 있습니까? 당신은 그것이 작동하지 않는다고하지만 그것이 효과가 있으며 10 년 가까이 일했다고 말한다. 코드의 표시에 도움이되는 // 주석을 추가했습니다. – Kevin