ただし、渡す必要があるファイルが数個だけで、その場合、コンポーネントを使用するのは少しやりすぎです。必要な機能を実現する鍵は、バックグラウンドの受信プログラムの処理にあります。
PHP はアップロードを非常に便利に処理します。アップロードされたファイル情報は、サーバーを通じて自動的に $_FILES 配列に処理されます。開発者は、組み込みの処理関数を使用して簡単な操作を実行するだけです。 ASP 開発者はそれほど幸運ではありません。公式には直接処理方法が提供されていないため、開発者は現時点では、IIS が enctype="multipart/form-data" フォームをどのように処理するかを理解する必要があります。 enctype= 「multipart/form-data」フォームによって送信されたデータはバイナリ データとして保存され、バイナリ形式で開発者に返されます。開発者は、取得したアップロード コンテンツとクライアントが送信する特定の形式のデータ形式については、HTTP RFC1867 プロトコルの送信形式について知ることができます。
以下は、php バージョンと asp バージョンの両方を含む複数のファイルのアップロードを処理する方法です。
php: WEBSITE_DIRROOT は Web サイトのルート ディレクトリを表します:
コードをコピーします コードは次のとおりです:
/*
* class: 文件上传类
* author: 51JS.COM-ZMM
* date: 2011.1.20
* email: 304924248@qq.com
* ブログ: http://www.cnblogs.com/cnzmm/
*/
class Upload {
public $up_ext=array(), $up_max =5210, $up_dir;
private $up_name, $up_rename=true, $up_num=0, $up_files=array(), $up_ret=array();
function __construct($name, $ext=array(), $rename=true) {
if (!empty($name)) {
$this->up_name = $name ;
!empty($ext) && $this->up_ext = $ext;
$this->up_rename = $rename;
$this->up_dir = WEBSITE_DIRROOT。
$GLOBALS['cfg_upload_path'];
$this->InitUpload();
} else {
exit('upload文件ドメイン名は空,初化失败!');
}
}
プライベート関数 InitUpload() {
if (is_array($_FILES[$this->up_name])) {
$up_arr = count($_FILES) [$this->up_name]);
$up_all = count($_FILES[$this->up_name], 1);
$up_cnt = ($up_all - $up_arr) / $up_arr;
for ($i = 0; $i if ($_FILES[$this->up_name]['error'][$i] != 4) {
$this->up_files[] = array(
'tmp_name' => $_FILES[$this->up_name]['tmp_name'][$i],
'name' = > $_FILES[$this->up_name]['name'][$i],
'type' => $_FILES[$this->up_name]['type'][$i] 、
'サイズ' => $_FILES[$this->up_name]['size'][$i]、
'エラー' => $_FILES[$this->up_name][ 'エラー'][$i]
);
}
}
$this->up_num = count($this->up_files);
} else {
if (isset($_FILES[$this->up_name])) {
$this->up_files = array(
'tmp_name' => $_FILES[ $this->up_name]['tmp_name'],
'name' => $_FILES[$this->up_name]['name'],
'type' => $this->up_name]['type'],
'size' => $_FILES[$this->up_name]['size'],
'error' => $this->up_name]['error']
);
$this->up_num = 1;
} else {
exit('没找找到アップロード必要な文書!');
}
}
$this->ChkUpload();
}
プライベート関数 ChkUpload() {
if (empty($this->up_ext)) {
$up_mime = array('image/wbmp', 'image/bmp '、'image/gif'、'image/pjpeg'、'image/x-png');
foreach ($this->up_files as $up_file) {
$up_allw = false;
foreach ($up_mime as $mime) {
if ($up_file['type'] == $mime) {
$up_allw = true;壊す;
}
}
!$up_allw && exit('不允许上传'.$up_file['type'].'格式的文件!');
if ($up_file['size'] / 1024 > $this->up_max) {
exit('不允许上传大上 '.$this->up_max.'K の文書!');
}
}
} else {
foreach ($this->up_files as $up_file) {
$up_ext = end(explode('.', $up_file['name' ]));
$up_allw = false;
foreach ($this->up_ext as $ext) {
if ($up_ext == $ext) {
$up_allw = true;壊す;
}
}
!$up_allw && exit('不允许上传.'.$up_ext.'格式的文件!');
if ($up_file['size'] / 1024 > $this->up_max) {
exit('不允许上传大上 '.$this->up_max.'K の文書!');
}
}
}
$this->Uploading();
}
プライベート関数 Uploading() {
if (IO::DIRCreate($this->up_dir)) {
if (chmod($this->up_dir, 0777) )) {
if (!empty($this->up_files)) {
foreach ($this->up_files as $up_file) {
if (is_uploaded_file($up_file['tmp_name'] )) {
$file_name = $up_file['name'];
if ($this->up_rename) {
$file_ext = end(explode('.', $file_name));
$file_rnd = substr(md5(uniqid()), mt_rand(0, 26), 6);
$file_name = date('ymdHis').'_'.$file_rnd.'.'.$file_ext;
}
$file_name = $this->up_dir.'/'.$file_name;
if (move_uploaded_file($up_file['tmp_name'], $file_name)) {
$this->up_ret[] = str_replace(WEBSITE_DIRROOT, '', $file_name);
} else {
exit('文件上传失败!');
}
}
}
}
} else {
exit('未开启写入权限!');
}
} else {
exit('上传目录创建失败!');
}
}
public function GetUpload() {
return empty($this->up_ret) ? false : $this->up_ret;
}
関数 __destruct() {}
}
?>
asp:
复制代码代码如下:
Class MultiUpload
REM PUBLIC-VARIANT
Public Form, IsFinished
Private bVbCrlf, bSeparate, fPassed, formData, fileType, fileSize, folderPath, _
fRename, fIMGOnly, itemCount, chunkSize, bTime, sErrors, sAuthor, sVersion
Private itemStart(), itemLength(), dataStart(), dataLength(), itemName(), itemData(), extenArr(), httpArr()
REM CLASS-INITIALIZE
Private Sub Class_Initialize
Call InitVariant
Server.ScriptTimeOut = 1800
Set Form = Server.CreateObject("Scripting.Dictionary")
sAuthor = "51JS.COM-ZMM"
sVersion = "MultiUpload Class 3.0"
End Sub
REM CLASS-ATTRIBUTES
Public Property Let AllowType(byVal sType)
Dim regEx
Set regEx = New RegExp
regEx.Pattern = "^(\w+\|)*\w+$"
regEx.Global = False
regEx.IgnoreCase = True
If regEx.Test(sType) Then fileType = "|" & Ucase(sType) & "|"
Set regEx = Nothing
End Property
Public Property Let MaxSize(byVal sSize)
If IsNumeric(sSize) Then fileSize = CDbl(FormatNumber(CCur(sSize), 2))
End Property
Public Property Let SaveFolder(byVal sFolder)
folderPath = sFolder
End Property
Public Property Let CommonPassed(byVal bCheck)
fPassed = bCheck
End Property
Public Property Let FileRenamed(byVal bRename)
fRename = bRename
End Property
Public Property Let FileIsAllImg(byVal bOnly)
fIMGOnly = bOnly
End Property
Public Property Get SaveFolder
SaveFolder = folderPath
End Property
Public Property Get FileRenamed
FileRenamed = fRename
End Property
Public Property Get FileIsAllImg
FileIsAllImg = fIMGOnly
End Property
Public Property Get ErrMessage
ErrMessage = sErrors
End Property
Public Property Get ClsAuthor
ClsAuthor = sAuthor
End Property
Public Property Get ClsVersion
ClsVersion = sVersion
End Property
REM CLASS-METHODS
Private Function InitVariant
IsFinished = False
bVbCrlf = StrToByte(vbCrlf & vbCrlf)
bSeparate = StrToByte(String(29, "-"))
fPassed = False
fileType = "*"
fileSize = "*"
fRename = True
fIMGOnly = True
itemCount = 0
chunkSize = 1024 * 128
bTime = Now
sErrors = ""
End Function
Public Function GetUploadData
Dim curRead : curRead = 0
Dim dataLen : dataLen = Request.TotalBytes
Dim appName : appName = "PROGRESS" & IPToNum(GetClientIPAddr)
Dim streamTmp
Set streamTmp = Server.CreateObject("ADODB.Stream")
streamTmp.Type = 1
streamTmp.Open
Do While curRead Dim partLen : partLen = chunkSize
If partLen + curRead > dataLen Then partLen = dataLen - curRead
streamTmp.Write Request.BinaryRead(partLen)
curRead = curRead + partLen
LetProgress appName, Array(curRead, dataLen, DateDiff("s", bTime, Now), folderPath)
Loop
streamTmp.Position = 0
formData = streamTmp.Read(dataLen)
streamTmp.Close
Set streamTmp = Nothing
Call ItemPosition
End Function
Private Function LetProgress(byVal sName, byVal vArr)
Application.Value(sName) = Join(vArr, "|")
End Function
Private Function DelProgress
Application.Contents.Remove("PROGRESS" & IPToNum(GetClientIPAddr))
End Function
Private Function ItemPosition
Dim iStart, iLength : iStart = 1
Do Until InStrB(iStart, formData, bSeparate) = 0
iStart = InStrB(iStart, formData, bSeparate) + LenB(bSeparate) + 14
iLength = InStrB(iStart, formData, bSeparate) - iStart - 2
If Abs(iStart + 2 - LenB(formData)) > 2 Then
ReDim Preserve itemStart(itemCount)
ReDim Preserve itemLength(itemCount)
itemStart(itemCount) = iStart
itemLength(itemCount) = iLength
itemCount = itemCount + 1
End If
Loop
Call FillItemValue
End Function
Private Function FillItemValue
Dim dataPart, bInfor
Dim iStart : iStart = 1
Dim iCount : iCount = 0
Dim iCheck : iCheck = StrToByte("filename")
For i = 0 To itemCount - 1
ReDim Preserve itemName(iCount)
ReDim Preserve itemData(iCount)
ReDim Preserve extenArr(iCount)
ReDim Preserve httpArr(iCount)
ReDim Preserve dataStart(iCount)
ReDim Preserve dataLength(iCount)
dataPart = MidB(formData, itemStart(i), itemLength(i))
iStart = InStrB(1, dataPart, ChrB(34)) + 1
iLength = InStrB(iStart, dataPart, ChrB(34)) - iStart
itemName(iCount) = GetItemName(MidB(dataPart, iStart, iLength))
iStart = InStrB(1, dataPart, bVBCrlf) + 4
iLength = LenB(dataPart) - iStart + 1
If InStrB(1, dataPart, iCheck) > 0 Then
bInfor = MidB(dataPart, 1, iStart - 5)
extenArr(iCount) = FileExtenName(bInfor)
httpArr(iCount) = GetHttpContent(bInfor)
If IsNothing(extenArr(iCount)) Then
itemData(iCount) = ""
dataStart(iCount) = ""
dataLength(iCount) = ""
Else
If Mid(folderPath, Len(folderPath) - 1) = "/" Then
If fRename Then
itemData(iCount) = folderPath & GetRandomName(6) & extenArr(iCount)
Else
itemData(iCount) = folderPath & GetClientName(bInfor) & extenArr(iCount)
End If
Else
If fRename Then
itemData(iCount) = folderPath & "/" & GetRandomName(6) & extenArr(iCount)
Else
itemData(iCount) = folderPath & "/" & GetClientName(bInfor) & extenArr(iCount)
End If
End If
dataStart(iCount) = itemStart(i) + iStart - 2
dataLength(iCount) = iLength
End If
Else
extenArr(iCount) = ""
httpArr(iCount) = ""
itemData(iCount) = ByteToStr(MidB(dataPart, iStart, iLength))
dataStart(iCount) = ""
dataLength(iCount) = ""
End If
iCount = iCount + 1
Next
Call ItemToColl
End Function
Private Function GetItemName(byVal bName)
GetItemName = ByteToStr(bName)
End Function
Private Function ItemToColl
For i = 0 To itemCount - 1
If Not Form.Exists(itemName(i)) Then
Form.Add itemName(i), itemData(i)
End If
Next
End Function
Private Function FileExtenName(byVal bInfor)
Dim pContent, regEx
pContent = GetClientPath(bInfor)
If IsNothing(pContent) Then
FileExtenName = ""
Else
Set regEx = New RegExp
regEx.Pattern = "^.+(\.[^\.]+)$"
regEx.Global = False
regEx.IgnoreCase = True
FileExtenName = regEx.Replace(pContent, "$1")
Set regEx = Nothing
End If
End Function
Private Function GetHttpContent(byVal bInfor)
Dim sInfor, regEx
sInfor = ByteToStr(bInfor)
Set regEx = New RegExp
regEx.Pattern = "^[\S\s]+Content-Type:([\S\s]+)$"
regEx.Global = False
regEx.IgnoreCase = True
GetHttpContent = Trim(regEx.Replace(sInfor, "$1"))
Set regEx = Nothing
End Function
Private Function GetRandomName(byVal sLen)
Dim regEx, sTemp, arrFields, n : n = 0
Set regEx = New RegExp
regEx.Pattern = "[^\d]+"
regEx.Global = True
regEx.IgnoreCase = True
sTemp = regEx.Replace(Now, "") & "-"
Set regEx = Nothing
arrFields = Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", _
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", _
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t", _
"u", "v", "w", "x", "y", "z", "A", "B", "C", "D", _
"E", "F", "G", "H", "I", "J", "K", "L", "M", "N", _
"O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", _
"Y", "Z")
Randomize
Do While n sTemp = sTemp & CStr(arrFields(61 * Rnd))
n = n + 1
Loop
GetRandomName = sTemp
End Function
Private Function GetClientName(byVal bInfor)
Dim pContent, regEx
pContent = GetClientPath(bInfor)
If IsNothing(pContent) Then
GetClientName = ""
Else
Set regEx = New RegExp
regEx.Pattern = "^.*\\([^\.]*)[^\\]+$"
regEx.Global = False
regEx.IgnoreCase = True
GetClientName = regEx.Replace(pContent, "$1")
Set regEx = Nothing
End If
End Function
Private Function GetClientPath(byVal bInfor)
Dim sInfor, pStart, pLength, pContent
sInfor = ByteToStr(bInfor)
pStart = InStr(1, sInfor, "filename=" & Chr(34)) + 10
pLength = InStr(pStart, sInfor, Chr(34)) - pStart
pContent = Mid(sInfor, pStart, pLength)
GetClientPath = pContent
End Function
Public Function SaveUploadFile
Dim isValidate
Dim filePath, oStreamGet, oStreamPut
isValidate = fPassed And CheckFile
If isValidate Then
For i = 0 To itemCount - 1
If Not IsNothing(dataStart(i)) And Not IsNothing(dataLength(i)) Then
If dataLength(i) = 0 Then
itemData(i) = ""
Else
filePath = Server.MapPath(itemData(i))
If CreateFolder("|", ParentFolder(filePath)) Then
Set oStreamGet = Server.CreateObject("ADODB.Stream")
oStreamGet.Type = 1
oStreamGet.Mode = 3
oStreamGet.Open
oStreamGet.Write formData
oStreamGet.Position = dataStart(i)
Set oStreamPut = Server.CreateObject("ADODB.Stream")
oStreamPut.Type = 1
oStreamPut.Mode = 3
oStreamPut.Open
oStreamPut.Write oStreamGet.Read(dataLength(i))
oStreamPut.SaveToFile filePath, 2
oStreamGet.Close
Set oStreamGet = Nothing
oStreamPut.Close
Set oStreamPut = Nothing
End If
End If
End If
Next
IsFinished = True
Else
IsFinished = False
End If
End Function
Private Function CheckFile
Dim oBoolean : oBoolean = True
CheckFile = oBoolean And CheckType And CheckSize
End Function
Private Function CheckType
Dim oBoolean : oBoolean = True
If fileType = "*" Then
oBoolean = oBoolean And True
Else
For i = 0 To itemCount - 1
If Not IsNothing(extenArr(i)) Then
If InStr(1, fileType, "|" & Ucase(Mid(extenArr(i), 2)) & "|") > 0 Then
If fIMGOnly Then
Dim sAllow : sAllow = "|GIF|PJPEG|X-PNG|BMP|"
Dim aCheck : aCheck = Split(UCase(httpArr(i)), "/")
Dim iCheck : iCheck = "|" & aCheck(Ubound(aCheck)) & "|" If InStr(1, sAllow, iCheck, 1) > 0 then
oBoolean = oBoolean And True
Else
sErrors = sErrors & "フォーム [ " & itemName(i) & " ] のファイル形式が間違っています! n" & _
"サポートされている形式は次のとおりです: " & Replace(Mid(fileType, 2, Len( fileType ) - 1), "|", " ") & "nn"
oBoolean = oBoolean And False
End If
Else
oBoolean = oBoolean And True
End If
Else
sErrors = sErrors & "フォーム [ " & itemName(i) & " ] のファイル形式が間違っています! n" & _
"サポートされている形式は次のとおりです: " & Replace(Mid(fileType, 2, Len) (fileType ) - 1), "|", " ") & "nn"
oBoolean = oBoolean And False
End If
End If
Next
End If
CheckType = oBoolean
End Function
プライベート関数 CheckSize
Dim oBoolean : oBoolean = True
If fileSize = "*" then
oBoolean = oBoolean And True
Else
For i = 0 To itemCount - 1
If Not IsNothing(dataLength(i)) then
Dim tmpSize : tmpSize = CDbl(FormatNumber(CCur(dataLength(i)) / 1024, 2))
If tmpSize oBoolean = oBoolean And True
Else
sErrors = sErrors & "フォーム [ " & itemName(i) & " ] のファイル サイズ (" & tmpSize & " KB) が不足しています範囲の! n" & _
" サポートされるサイズ範囲: oBoolean = oBoolean And False
End If
End If
Next
End If
CheckSize = oBoolean
終了関数
プライベート関数 CreateFolder(byVal sLine, byVal sPath)
Dim oFso
Set oFso = Server.CreateObject("Scripting.FileSystemObject")
oFso.FolderExists(sPath) でない場合は、
Dim regEx
Set regEx = New RegExp
regEx.Pattern = "^(.*)\([^\]*)$"
regEx。グローバル = False
regEx.IgnoreCase = True
sLine = sLine & regEx.Replace(sPath, "$2") & "|"
sPath = regEx.Replace(sPath, "$1")
If CreateFolder(sLine, sPath) then CreateFolder = True
Set regEx = Nothing
Else
If sLine = "|" then
CreateFolder = True
Else
Dim sTemp : sTemp = Mid(sLine, 2, Len(sLine) - 2)
If InStrRev(sTemp, "|") = 0 then
sLine = "|"
sPath = sPath & "" & sTemp
それ以外の場合
Dim フォルダー : Folder = Mid(sTemp, InStrRev(sTemp, "|") 1)
sLine = "|" & Mid(sTemp, 1, InStrRev(sTemp, "|") - 1) & "|"
sPath = sPath & "" & フォルダー
End If
oFso.CreateFolder sPath
If CreateFolder(sLine, sPath) then CreateFolder = True
End if
End If
Set oFso = Nothing
End Function
Private Function ParentFolder(byVal sPath)
Dim regEx
Set regEx = New RegExp
regEx.Pattern = "^(.* )\[^\]*$"
regEx.Global = True
regEx.IgnoreCase = True
ParentFolder = regEx.Replace(sPath, "$1")
Set regEx = Nothing
終了関数
プライベート関数 IsNothing(byVal sVar)
IsNothing = CBool(sVar = Empty)
終了関数
プライベート関数 StrPadLeft(byVal sText, byVal sLen, byVal sChar)
Dim sTemp : sTemp = sText
Do While Len(sTemp) StrPadLeft = sTemp
End Function
Private Function StrToByte( byVal sText)
For i = 1 To Len(sText)
StrToByte = StrToByte & ChrB(Asc(Mid(sText, i, 1)))
Next
End Function
プライベート関数 ByteToStr(byVal sByte)
Dim oStream
Set oStream = Server.CreateObject("ADODB.Stream")
oStream.Type = 2
oStream.Mode = 3
oStream。オープン
oStream.WriteText sByte
oStream.Position = 0
oStream.CharSet = "gb2312"
oStream.Position = 2
ByteToStr = oStream.ReadText
oStream.Close
oStream = Nothing に設定
終了関数
プライベート関数 GetClientIPAddr
If IsNothing(GetServerVar("HTTP_X_FORWARDED_FOR")) then
GetClientIPAddr = GetServerVar("REMOTE_ADDR")
Else
GetClientIPAddr = GetServerVar("HTTP_X_FORWARDED_FOR")
End If
終了関数
プライベート関数 GetServerVar(byVal sText)
GetServerVar = Request.ServerVariables(sText)
終了関数
プライベート関数 IPToNum(byVal sIp)
Dim sIp_1, sIp_2, sIp_3, sIp_4
If IsNumeric(Left(sIp, 2)) then
sIp_1 = Left(sIp, InStr(sIp, " .") - 1)
sIp = Mid(sIp, InStr(sIp, ".") 1)
sIp_2 = Left(sIp, InStr(sIp, ".") - 1)
sIp = Mid(sIp, InStr(sIp, ".") 1)
sIp_3 = Left(sIp, InStr(sIp, ".") - 1)
sIp_4 = Mid(sIp, InStr(sIp, "." ) 1)
終了 If
IPToNum = CInt(sIp_1) * 256 * 256 * 256 CInt(sIp_2) * 256 * 256 CInt(sIp_3) * 256 CInt(sIp_4) - 1
関数終了
REM CLASS-TERMINATE
Private Sub Class_Terminate
Call DelProgress
Form.RemoveAll
Set Form = Nothing
End Sub
End Class
%>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

WebStorm Mac版
便利なJavaScript開発ツール

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
