none
vb.net 이미지업로드 예제소스중 질문입니다. RRS feed

  • 질문

  •     Public Async Sub ImagePost(ImageType As String, ImageName As String, ImagePath As String)
            Dim ImageContentType As String
            Dim Imgformat As ImageFormat
            Dim boundary As String = "-----------------------------" & DateTime.Now.Ticks.ToString("x")
            Dim postReq2 As HttpWebRequest = WebRequest.Create("http://imgdb.kilho.net/upload.php")
            With postReq2
                .Host = "imgdb.kilho.net"
                .Method = "POST"
                .Referer = "http://image.kilho.net/"
                .UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0"
                .ContentType = "multipart/form-data; boundary=" & "---------------------------" & DateTime.Now.Ticks.ToString("x")
                .AllowAutoRedirect = True
                .PreAuthenticate = True
                .KeepAlive = True
            End With
            Dim builder As New StringBuilder()
            builder.Append(boundary & vbCrLf & "Content-Dis-data; name=""MAX_FILE_SIZE""" & vbCrLf & vbCrLf & "3145728" & vbCrLf)
            builder.Append(boundary & vbCrLf & "Content-Dis-data; name=""userfile""; filename=""" & ImageName & """" & vbCrLf & ImageContentType & vbCrLf & vbCrLf)
            Dim ImageData As String = ImageToBase64(picbPostImage.Image, Imgformat)
            builder.Append(ImageData)
            builder.Append(vbCrLf)
            Dim close As Byte() = System.Text.Encoding.UTF8.GetBytes("--")
            Dim postHeader As String = builder.ToString()
            Dim postHeaderBytes As Byte() = System.Text.Encoding.UTF8.GetBytes(postHeader)
            Dim boundaryBytes As Byte() = System.Text.Encoding.ASCII.GetBytes(vbCrLf & boundary & "--" & vbCrLf)
            Dim length As Long = postHeaderBytes.Length + boundaryBytes.Length
            postReq2.ContentLength = length
            Dim requestStream As Stream = Await postReq2.GetRequestStreamAsync
            Dim fulllength As Integer = postHeaderBytes.Length + boundaryBytes.Length
            requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length)
            requestStream.Write(boundaryBytes, 0, boundaryBytes.Length)
            Clipboard.SetText(builder.ToString)
            Dim responce As WebResponse
            responce = postReq2.GetResponse()
            requestStream.Close()
            Dim s As Stream = responce.GetResponseStream()
            Dim sr As New StreamReader(s)
            Dim Content As String = sr.ReadToEnd()
            MsgBox(Content)
            If Not Content = Nothing Then
                lblImageStatus.Text = "상태 : 이미지를 업로드했습니다."
                txtImageText.Clear()
            Else
                lblImageStatus.Text = "상태 : 작성에 실패하였습니다."
            End If
            sr.Dispose()
        End Sub

    http://imgdb.kilho.net/upload.php 이 사이트에 이미지업로드를 일단 해보려고하는데 403 오류가뜨면서 작동이 정상적으로 되지않습니다.. 대체 어디가 문제인걸까요?

    2016년 1월 2일 토요일 오후 5:14

답변

  • 안녕하세요.

    403에러의 경우, 폴더 접근권한의 문제가 아닌가 생각됩니다.

    소스의 정당성도 물론 관계가 있겠습니다만,

    리퀘스트 하시는 "http://imgdb.kilho.net/upload.php" 에 대해서 

    모든권한이 열려있는지, 혹은 인증방식에 있어서 유져및 패스워드 설정해서 날려야 하는건 아닌지 확인해보세요.

    이 부분에 문제가 있다고 보여집니다.


    프로그램 개발에는 정답이 없다.

    • 답변으로 제안됨 Sungman KOMVP 2016년 1월 5일 화요일 오전 6:05
    • 답변으로 표시됨 Boram YiModerator 2016년 1월 7일 목요일 오전 3:23
    2016년 1월 5일 화요일 오전 4:34

모든 응답

  • 안녕하세요.

    403에러의 경우, 폴더 접근권한의 문제가 아닌가 생각됩니다.

    소스의 정당성도 물론 관계가 있겠습니다만,

    리퀘스트 하시는 "http://imgdb.kilho.net/upload.php" 에 대해서 

    모든권한이 열려있는지, 혹은 인증방식에 있어서 유져및 패스워드 설정해서 날려야 하는건 아닌지 확인해보세요.

    이 부분에 문제가 있다고 보여집니다.


    프로그램 개발에는 정답이 없다.

    • 답변으로 제안됨 Sungman KOMVP 2016년 1월 5일 화요일 오전 6:05
    • 답변으로 표시됨 Boram YiModerator 2016년 1월 7일 목요일 오전 3:23
    2016년 1월 5일 화요일 오전 4:34
  • http://imgdb.kilho.net/upload.php 사이트는 단순한 이미지업로드 사이트로 어떠한 권한도 필요없이 이미지가 업로드 가능합니다.

        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

            Dim ImageBinary() As Byte, BHeader1() As Byte, BHeader2() As Byte, Buffer() As Byte
            Dim fPath As String


            fPath = "C:\Users\변형민\Desktop\이미지 업로드\333.JPG"


            ImageBinary = File.ReadAllBytes(fPath)
            BHeader1 = System.Text.Encoding.UTF8.GetBytes(Split(TextBox1.Text, "wBinary")(0))
            BHeader2 = System.Text.Encoding.UTF8.GetBytes(Split(TextBox1.Text, "wBinary")(1))

            Dim DS As New MemoryStream

            DS.Write(BHeader1, 0, BHeader1.Length)
            'DS.Write(ImageBinary, 0, ImageBinary.Length)
            DS.Write(BHeader2, 0, BHeader2.Length)

            ReDim Buffer(DS.Length)
            'DS.Read(Buffer, 0, Buffer.Length) : DS.Close()
            With winhttp
                .Open("POST", "http://imgdb.kilho.net/upload.php")
                .SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Firefox/38.0")
                .SetRequestHeader("Referer", "http://image.kilho.net/")
                .SetRequestHeader("Content-Type", "multipart/form-data; boundary=---------------------------1877296668268")
                .SetRequestHeader("Content-Length", UBound(Buffer))
                .Send(Buffer)

                MsgBox(.ResponseText)

            End With
        End Sub

    이미지를 바이너리화 시키는것에 문제가있다고 보는데 이 코드가 맞나요?

    2016년 1월 5일 화요일 오전 10:25
  •         ImageBinary = File.ReadAllBytes(fPath)
            BHeader1 = System.Text.Encoding.UTF8.GetBytes(Split(TextBox1.Text, "wBinary")(0))

    위의 코드에대해서 바이너리 변환은 문제없이 잘 되고 있습니다.

    소스에서 디버그 모드로 확인했습니다.

    With winhttp 이하에서

    제대로 파일이 업로드 되는지 한번 확인해보시면 될것 같습니다.

    그리고 서버에서 원하는 형태의 바이너리가 맞는지 확인도 필요할것 같네요. (회사라서 제가 업로드를 마음대로 할수가 없네요...)


    프로그램 개발에는 정답이 없다.

    2016년 1월 6일 수요일 오전 8:17