Aloha!
Schon ne weile her aber da ich AutoIt mal wieder ausgekramt habe
Folgendes:
Ich möchte eine Bilddatei(Jpg) per POST-Data an ein PHP-Skript übergeben... so weit so gut.. das ganze klappt auch.. nur scheiterts daran das Ganze auf der anderen Seite beim zurückschreiben in eine Datei.
...das blöde Dateiformat...
hatte ein bissel rumgesucht und dachte da an die PHP-Funktion "pack()"... allerdings brauch ich dafür wohl irgendeine art von Info wie Autoit den String codiert hat oder so??
Hochladen tu ich das ganze über die HTTP-UDF und 2 Zusatzfunktionen die ich mir wo per Google rausgefischt hab.
hatte schon versucht daran ein wenig rumzuspielen... ohne erfolg offenbar...
Spoiler anzeigen
Func _HTTPPost_File($host, $page, $socket = -1, $file = "", $fieldname = "")
Dim $command
Local $extra_commands
If $socket == -1 Then
If $_HTTPLastSocket == -1 Then
SetError(1)
Return
EndIf
$socket = $_HTTPLastSocket
EndIf
Local $contenttype = _HTTPPost_contenttype($file)
; Maybe this can be done easier/better?
Local $boundary = "------"&Chr(Random(Asc("A"), Asc("Z"), 3))&Chr(Random(Asc("a"), Asc("z"), 3))&Chr(Random(Asc("A"), Asc("Z"), 3))&Chr(Random(Asc("a"), Asc("z"), 3))&Random(1, 9, 1)&Random(1, 9, 1)&Random(1, 9, 1)
;If $contenttype = "text/plain" Then
Local $fileopen = FileOpen($file, 16); Open in read only mode
Local $fileread = FileRead($fileopen)
FileClose($fileopen)
$file = "screenshot.jpg"
$extra_commands = "--"&$boundary&@CRLF
$extra_commands &= "Content-Disposition: form-data; name="""&$fieldname&"""; filename=""" & $file & """" &@CRLF
$extra_commands &= "Content-Type: "&$contenttype&@CRLF&@CRLF
$extra_commands &= $fileread&@CRLF
$extra_commands &= "--"&$boundary&"--"
;EndIf
Dim $datasize = StringLen($extra_commands)
$command = "POST "&$page&" HTTP/1.1"&@CRLF
$command &= "Host: " &$host&@CRLF
$command &= "User-Agent: "&$_HTTPUserAgent&@CRLF
;$command &= "Connection: close"&@CRLF
$command &= "Content-Type: multipart/form-data; boundary="&$boundary&@CRLF
$command &= "Content-Length: "&$datasize&@CRLF&@CRLF
$command &= $extra_commands
;debug info
If FileExists("output.txt") Then FileDelete("output.txt")
$file = FileOpen("output.txt", 1)
FileWrite($file, $command)
FileClose($file)
;end debug info
Dim $bytessent = TCPSend($socket, $command)
If $bytessent == 0 Then
SetExtended(@error)
SetError(2)
return 0
EndIf
SetError(0)
Return $bytessent
EndFunc
Func _HTTPPost_contenttype($file = "")
Local $fileextension = StringRight($file,4)
Local $contenttype
Switch $fileextension
Case "html"
$contenttype = "text/html"
Case ".htm"
$contenttype = "text/html"
Case ".jpg"
$contenttype = "image/jpeg"
Case "jpeg"
$contenttype = "image/jpeg"
Case ".png"
$contenttype = "image/png"
Case ".txt"
$contenttype = "text/plain"
Case Else
$contenttype = "application/octet-stream"
EndSwitch
Return $contenttype
EndFunc
Alles anzeigen
der eine oder andere vermutet vielleicht? das in der Datei auf dem Server dann nur etwas wie folgendes in der Datei als Text steht:
0xFFD8FFE000104A46494600010101006000600000FFDB004300080606070605080707070909080A0C140D0C0B.....
rauskommen soll natürlich eigentlich der gute alte zusammengematschte "Maschinencode"... also eine Bilddatei die ich mir einfach ansehen kann..
ich hoffe das ich hier damit richtig bin da ich an der Quelle der Bilddatei ansetzen wollte und in nem PHP-Forum mit AutoIt vlt. niemand was anfangen kann...
FTP ist in diesem zusammenhang übrigends leider keine Alternative für mich
grüße
- sgtigram