Avatar billede jps2mt Nybegynder
15. december 2003 - 21:12 Der er 28 kommentarer og
1 løsning

HTTP uploade PictureBox

Er det muligt at HTTP-uploade (via et PHP-script på serveren) en PictureBox??

Jeg vil helst undgå FTP, da nogle potentielle brugere af programmet sidder bag en firewall der ikke tillader FTP (på en skole)...

Jeg kan ikke lige selv gennemskue, hvordan man kan sende en PictureBox til et PHP-script, samt et par variabler mere, defineret af programmet...

Filnavnet er mindre vigtigt, da det defineres af de variabler der medsendes fra programmet...
Avatar billede sjh Nybegynder
15. december 2003 - 21:19 #1
øøø du skriver en PictureBox??? mener du ikke et billede??
Avatar billede jps2mt Nybegynder
15. december 2003 - 21:33 #2
Jeg mener indholdet af en picturebox...Det er til noget billede redigering, som skal gemmes online...
Avatar billede sjh Nybegynder
15. december 2003 - 21:39 #3
jo det kan du godt, men du bliver nok nød til at gemme dit billede først med SavePicture (desværre kun som .bmp)

se her (Handling file uploads) du skal bruge winsock, og sende som POST
http://winsockvb.com/article.php?article_id=32&page=2
Avatar billede jps2mt Nybegynder
15. december 2003 - 21:47 #4
Selve formatet af billedet betyder mindre, da det kan konverteres til det format jeg vil bruge, server-side med GD...

Har kigget lidt på den del du referer til, men kan ikke se hvad/hvor jeg får boundary strengen fra...Altså den samling tal/bogstaver i boundary...

Ellers ser det meget godt ud...
Avatar billede sjh Nybegynder
15. december 2003 - 21:53 #5
prøv at se lidt på den her : http://www.winsockvb.com/code/http/http.zip

men det handler om det data commandor du skal sende med winsock (ikke nemt hvis du er nybegynder)

.. Kan du ikke bare uploade billede selv.. og brug SavePicture til at gemme dit billede.. det er nok nemmest ;)
Avatar billede jps2mt Nybegynder
15. december 2003 - 21:55 #6
Det skal automatiseres... :) ...Jeg ved jeg er krævende, men den skal opdatere en gang hvert 10. - 15. sekund, pr. automatik, så det kan følges fra andre steder i verden...

Har skam leget en del med WinSock, bla. forsøgt mig med egen FTP-server, hvilket ikke lige gik så godt...
Avatar billede sjh Nybegynder
15. december 2003 - 21:59 #7
øøø hvad skal det bruges til siden det skal ske automatisk??
Avatar billede jps2mt Nybegynder
15. december 2003 - 22:00 #8
Billede redigering / tegning...
Avatar billede jps2mt Nybegynder
15. december 2003 - 22:00 #9
Bare en sjov ide jeg leger lidt med...
Avatar billede jps2mt Nybegynder
15. december 2003 - 22:04 #10
De 2 eksempler i http.zip har ingen post-del, så dem kan jeg ikke rigtigt bruge til så meget :(
Avatar billede sjh Nybegynder
15. december 2003 - 22:04 #11
jo okæææ så tror jeg ikke at du skal gemme det som bmp.. for så skal bruger jo have mindst 1MBit linje og din skole skal have 1MBit * bruger som skal se det

og hvis det bare er for sjovt...
Avatar billede jps2mt Nybegynder
15. december 2003 - 22:07 #12
Det er det jeg siger...Formatet det gemmes i er ikke noget problem...GD_lib som er med i PHP kan konvertere til JPG eller PNG...Så det er kun uploaderen...

Desuden har jeg allerede en funktion der kan gemme som JPG indbygget i programmet, så det er slet ikke noget problem...

Jeg mangler bare lige den fidus med at HTTP uploade et billede...
Avatar billede jps2mt Nybegynder
15. december 2003 - 22:08 #13
Ideelt ville være at uploade direkte fra PictureBox'en, men hvis det kræver at den skal gemme et billede på disken først, så er det hvad det er, og så bliver det sådan...Ikke noget problem i det...
Avatar billede sjh Nybegynder
15. december 2003 - 22:11 #14
Ja ok. Du skal bruge "HTTPGrabber" så du kan se hvad Internet Explorer sender til en webserver. så du kan gennem skuge de commandoer som du skal bruge til upload..
Avatar billede sjh Nybegynder
15. december 2003 - 22:15 #15
Men hvis programmet bare skal køre på samme computer som webserver er på, så kan du jo bare gemme dit billede i wwwroot...
Avatar billede jps2mt Nybegynder
16. december 2003 - 09:30 #16
Skal den ikke...Det skal gemmes på en remote webserver, på den anden side af en firewall der ikke tillader udgående FTP...

Jeg kan jo godt se, ud fra hvad der står på siden, hvad jeg skal skrive af headers, det er bare den der boundary jeg ikke kan se hvordan jeg skal generere...Er den statisk (samme for alle filer) eller er den dynamisk (forskellig fra fil til fil) og i så fald, hvad genereres den fra og hvordan?!
Avatar billede sjh Nybegynder
16. december 2003 - 12:28 #17
Jeg fandt noget kode som du sikkert kan bruge, ved hjælp af Micro$oft Internet Transfer Control.

http://club.pchome.net/2003/11/17/15_3563.php?rpcount=4
Det er ikke nemt at læse hvad de skriver.. men koden se ca. sådan ud..


Public Sub Inet_Upload(ByVal strFile As String)
Dim intFree As Integer

Dim strUrl As String, _
    strServerIp As String, _
    strServerPort As String, _
    strServerPage As String

Dim strData As String, _
    strHeaders As String, _
    strBoundary As String, _
    strCommand As String

  strServerIp = "208.169.53.241"
  strServerPort = "80"
  strServerPage = "upload.asp"

  strUrl = strServerIp & ":" & strServerPort & "/" & strServerPage

  intFree = FreeFile()
  Open strFile For Binary Access Read Lock Read Write As intFree
    strData = Space(LOF(intFree))
    Get #intFree, , strData
  Close intFree

  strBoundary = "---------------------------" & RndBoundary

  strCommand = strBoundary & vbCrLf & "Content-Disposition: form-data; name=" & Chr(34) & "filename" & Chr(34) & "; filename=" & Chr(34) & strFile & Chr(34) & vbCrLf & _
                                      "Content-Type: image/jpeg" & vbCrLf & vbCrLf & strData & vbCrLf & strBoundary & "--"

  strHeaders = "Content-Type: multipart/form-data; boundary=" & strBoundary & vbCrLf _
  & "Content-Length: " & CStr(Len(strCommand)) & vbCrLf

  With Inet1 '<- Micro$oft Internet Transfer Control
      .URL = "http://" & surl
      .Protocol = icHTTP
      .Execute .URL, "POST", strCommand, strHeaders
  End With
End Sub

Private Function RndBoundary() As String
Dim i As Integer
Dim intRnd As Integer
  Randomize
  For i = 1 To 14
    If i Mod 2 = 0 Then
      intRnd = Int((25 * Rnd) + 1)
      RndBoundary = RndBoundary & Chr$(intRnd + 64)
        Else
      intRnd = Int((8 * Rnd) + 1)
      RndBoundary = RndBoundary & intRnd
    End If
  Next
End Function
Avatar billede sjh Nybegynder
16. december 2003 - 12:29 #18
.URL = "http://" & surl = .URL = "http://" & strUrl
Avatar billede jps2mt Nybegynder
16. december 2003 - 20:17 #19
Jeg har nu igennem dagen siddet og leget med den kode du har skrevet...

Umiddelbart ser den god nok ud, men den sender intet til det PHP-script der skal modtage...Har noget error-checking i det, og der kommer ingen filer med til den...Ikke engang hvis jeg udvider den lidt til at den skal have et felt med der hedder uname...Det kommer heller ikke med til scriptet...

Hvad der går galt kan jeg imidlertid ikke lige gennemskue...
Avatar billede jps2mt Nybegynder
16. december 2003 - 21:53 #20
Sådan her ser koden ud nu, og det virker som sagt ikke :(

Public Sub Inet_Upload(ByVal strFile As String, ByVal uname As String)
Dim intFree As Integer

Dim strUrl As String, _
    strServerIp As String, _
    strServerPort As String, _
    strServerPage As String

Dim strData As String, _
    strHeaders As String, _
    strBoundary As String, _
    strCommand As String

  strServerIp = "192.168.2.10"
  strServerPort = "80"
  strServerPage = "upload.php"

  strUrl = strServerIp & ":" & strServerPort & "/" & strServerPage

  intFree = FreeFile()
  Open strFile For Binary Access Read Lock Read Write As intFree
    strData = Space(LOF(intFree))
    Get #intFree, , strData
  Close intFree

  strBoundary = "---------------------------" & RndBoundary

  strCommand = strBoundary & vbCrLf & "Content-Disposition: form-data; name=" & Chr(34) & "ufil" & Chr(34) & "; filename=" & Chr(34) & strFile & Chr(34) & vbCrLf & _
                                      "Content-Type: application/octet-stream" & vbCrLf & vbCrLf & strData & vbCrLf & strBoundary & vbCrLf

  strCommand = strCommand & "Content-Disposition: form-data; name=" & Chr(34) & "uname" & Chr(34) & vbCrLf & _
                                    vbCrLf & vbCrLf & uname & vbCrLf & strBoundary & "--"

  strHeaders = "Content-Type: multipart/form-data; boundary=" & strBoundary & vbCrLf _
  & "Content-Length: " & CStr(Len(strCommand)) & vbCrLf

  With frmMain.Inet1
      .URL = "http://" & strUrl
      .Protocol = icHTTP
      .Execute .URL, "POST", strCommand, strHeaders
  End With

  While frmMain.Inet1.StillExecuting
  DoEvents
  Wend
 
  MsgBox frmMain.Inet1.GetChunk(9048)
End Sub

Private Function RndBoundary() As String
Dim i As Integer
Dim intRnd As Integer
  Randomize
  For i = 1 To 14
    If i Mod 2 = 0 Then
      intRnd = Int((25 * Rnd) + 1)
      RndBoundary = RndBoundary & Chr$(intRnd + 64)
        Else
      intRnd = Int((8 * Rnd) + 1)
      RndBoundary = RndBoundary & intRnd
    End If
  Next
End Function
Avatar billede jps2mt Nybegynder
18. december 2003 - 21:40 #21
Jeg har nu leget lidt vidre med det, og forsøgt kun at få den til at sende brugernavnet, men heller ikke det bliver sendt til PHP-scriptet...Kan du slet ikke hjælpe mig her??
Avatar billede sjh Nybegynder
19. december 2003 - 00:10 #22
Jeg tror den er hjemme.. det virker fint hos mig..
http://home.get2net.dk/sjh/eksperten/440342/PHPUpload.zip
Avatar billede jps2mt Nybegynder
19. december 2003 - 15:47 #23
Hmmm...Jeg kan nu ikke få det til at virke...Kan heller ikke få den til at læse det som serveren måtte returnere, inden den lukker ned...Det ville hjælpe en del at den ville det...
Avatar billede sjh Nybegynder
19. december 2003 - 16:13 #24
Nu har du vel husket at ænder.. .RemoteHost = "127.0.0.1" og filen vb_script_upload.php skal ligge helt ude på roden.. og skrive hvor billede ligger Call SendImage("C:\Billede.jpg")

jeg har testet det, og det virker.
Avatar billede jps2mt Nybegynder
19. december 2003 - 16:24 #25
Ja ja, det er ændret, så det passer på det jeg har...

Det ser UMIDDELBART ud til at den får forbindelsen, og at den forsøger at sende noget til serveren, men jeg kan så bare ikke se hvad den svarer tilbage, med mindre der opstår en fejl, som winsock_error fanger...
Avatar billede jps2mt Nybegynder
28. december 2003 - 20:20 #26
Ingen ide til at få det løst??

Jeg kan slet ikke få den til at fange noget af det serveren gerne skulle svare tilbage... :(
Avatar billede jps2mt Nybegynder
28. december 2003 - 20:22 #27
Det her skulle vel være nok:

Private Sub Inet1_DataArrival(ByVal bytesTotal As Long)
Debug.Print bytesTotal
Inet1.GetData tmp, vbString, bytesTotal

Debug.Print tmp

Inet1.Close
End Sub


Den skriver bare INTET til debug...Heller ikke totalBytes...Men det eneste sted der står close er netop i dataarrival...Så den burde vel nå at fange det der måtte blive sendt... :(
Avatar billede jps2mt Nybegynder
28. december 2003 - 22:42 #28
Jeg er nu kommet et skridt nærmere og kan nu se hvad der kommer retur fra serveren (den manglede et par blanke linier)...

Men der bliver stadig ikke sendt noget til serveren, den modtager i hvert fald ikke noget fra programmet...
Avatar billede jps2mt Nybegynder
03. januar 2004 - 10:01 #29
Lukker det her...Ser ikke ud til at der er mere hjælp at hente til det her problem her på Exp... :(
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester