-
Notifications
You must be signed in to change notification settings - Fork 71
/
HTMLUpload.ahk
87 lines (78 loc) · 2.99 KB
/
HTMLUpload.ahk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
; Link: https://www.autohotkey.com/boards/viewtopic.php?p=21986#p21986
; Author: Bruttosozialprodukt
; Date: 2014-07-22
; for: AHK_L
HtmlUpload(url,FileNames,AddCDParams:="",AddHeaders:="") {
static MimeType := {jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",gif:"image/gif"}
boundary := RandomString(16)
Files := Object()
bodySize := 0
Loop % FileNames.MaxIndex() {
filePath := FileNames[A_Index]
SplitPath, filePath, fileName,, fileExt
buffer := "--" . boundary . "`r`n"
buffer .= "Content-Disposition: form-data; name=""file_" . A_Index-1 . """; filename=""" . fileName . """`r`n"
buffer .= "Content-Type: " . MimeType[fileExt] . "`r`n`r`n"
buffer .= "`r`n"
bodySize += StrLen(buffer)
Files[A_Index] := FileOpen(filePath, "r")
bodySize += Files[A_Index].Length
}
buffer := "--" . boundary
For cdKey, cdValue in AddCDParams
{
buffer .= "`r`nContent-Disposition: form-data; name=""" . cdKey . """`r`n`r`n"
buffer .= cdValue . "`r`n"
buffer .= "--" . boundary
}
buffer .= "--"
bodySize += StrLen(buffer)
VarSetCapacity(body,bodySize)
currentPos := 0
Loop % FileNames.MaxIndex() {
filePath := FileNames[A_Index]
SplitPath, filePath, fileName,, fileExt
VarSetCapacity(buffer,0)
buffer := "--" . boundary . "`r`n"
buffer .= "Content-Disposition: form-data; name=""file_" . A_Index-1 . """; filename=""" . fileName . """`r`n"
buffer .= "Content-Type: " . MimeType[fileExt] . "`r`n`r`n"
bufferSize := StrLen(buffer)
StrPut(buffer, &body+currentPos, bufferSize, "CP0")
currentPos += bufferSize
bufferSize := VarSetCapacity(buffer,Files[A_Index].Length)
Files[A_Index].RawRead(&buffer, bufferSize)
DllCall("RtlMoveMemory", "Ptr", &body+currentPos, "Ptr", &buffer, "UInt", bufferSize)
currentPos += bufferSize
VarSetCapacity(buffer,0)
buffer := "`r`n"
bufferSize := StrLen(buffer)
StrPut(buffer, &body+currentPos, bufferSize, "CP0")
currentPos += bufferSize
}
buffer := "--" . boundary
For cdKey, cdValue in AddCDParams
{
buffer .= "`r`nContent-Disposition: form-data; name=""" . cdKey . """`r`n`r`n"
buffer .= cdValue . "`r`n"
buffer .= "--" . boundary
}
buffer .= "--"
bufferSize := StrLen(buffer)
StrPut(buffer, &body+currentPos, bufferSize, "CP0")
currentPos += bufferSize
If (!IsObject(headers))
headers := Object()
headers["Content-Type"] := "multipart/form-data; boundary=" . boundary
headers["Content-Length"] := bodySize
Return HttpRequest(url,"POST",headers,body)
}
RandomString(length,chars:="") {
If (chars = "")
chars := "0123456789abcdefghijklmnopqrstuvwxyz"
charsCount := StrLen(chars)
Loop %length% {
Random, num, 1, % StrLen(chars)
string .= SubStr(chars,num,1)
}
Return string
}