2017-11-27 16 views
1

VB.net에서이 기능을 발견했으며 .aspx 페이지에서 사용하고 작동합니다.ASP.net : 이미지 무게, 크기 및 유형에 따라 원격 이미지로드를 제한 할 수 있습니까?

Private Sub LoadImageFromURL(URL As String, ByRef Img As Drawing.Bitmap) 
    Const BYTESTOREAD As Integer = 10000 
    Dim myRequest As WebRequest = WebRequest.Create(URL) 
    Dim myResponse As WebResponse = myRequest.GetResponse() 
    Dim ReceiveStream As Stream = myResponse.GetResponseStream() 
    Dim br As New BinaryReader(ReceiveStream) 
    Dim memstream As New MemoryStream() 
    Dim bytebuffer As Byte() = New Byte(BYTESTOREAD - 1) {} 
    Dim BytesRead As Integer = br.Read(bytebuffer, 0, BYTESTOREAD) 
    While BytesRead > 0 
     memstream.Write(bytebuffer, 0, BytesRead) 
     BytesRead = br.Read(bytebuffer, 0, BYTESTOREAD) 
    End While 
    Img = New Drawing.Bitmap(memstream) 
End Sub 

I 원격 imagebased에 로딩 제한하고자하는 바이트 단위

1) 이미지 크기 제한

2) PIC (X)의 최대 치수 Y

3) 허용되는 이미지 유형 (jpg, png)

나는 이미지 조작에 익숙하지 않으므로 가능한 경우 기능을 향상시키고 어떤 종류의 protec을 사용하도록 약간의 도움을 요청합니다. 이미지 URL에 악의적 인 사용을 피하십시오.

편집 : url 및 작품을 검증하기 위해에서 .aspx 페이지에서 내가 함수로 변환

감사

+0

잘못된 유형이거나 길이가 너무 길면 'content-type'및 'content-length' 헤더를 읽고 작업을 중단 할 수 있습니다. –

+0

힌트를 보내 주셔서 감사합니다. 그래서 myResponse.ContentLength와 myResponse.ContentType을 사용하여 값을 읽을 수 있습니다. 나는 결코 이런 식으로 생각하지 않았다. :) – Hart

+0

또한 'myRequest.Method = Net.WebRequestMethods.Http.Head'를 설정하면 다운로드를 시작하지 않고 헤더 정보 만 요청합니다. –

답변

0

을 기능을 사용해야합니다. 가볍고 빠를 수 있는지, 더 나은 해결책이 있는지 모르겠다.

Public Function ChkImageFromURL(URL As String) As Boolean 
    Dim myRequest As WebRequest = WebRequest.Create(URL) 
    myRequest.Method = WebRequestMethods.Http.Head 
    Dim myResponse As WebResponse = myRequest.GetResponse() 

    Dim ImageLen As Integer = myResponse.ContentLength 
    Dim ImageType As String = myResponse.ContentType 

    If (Lcase(ImageType) <> "image/jpeg" AND Lcase(ImageType) <> "image/png") Or ImageLen > 300000 Then 
     return false 
    Else 
     return true 
    End if 
End Function