Heim > Web-Frontend > js-Tutorial > Hauptteil

jQuery AjaxUpload Bildcode_jquery hochladen

WBOY
Freigeben: 2016-05-16 15:16:19
Original
1278 Leute haben es durchsucht

Dieses Mal wird AJAXUPLOAD als bürstenloses Upload-Plug-in für den Upload-Client verwendet. Die neueste Version ist 3.9. Die offizielle Adresse: http://valums.com/ajax-upload/

Fügen Sie jquery.min.1.4.2.js und ajaxupload.js
in die Seite ein

<script src="Scripts/jquery-1.4.2.min.js" type="text/javascript"></script>
<script src="Scripts/ajaxupload3.9.js" type="text/javascript"></script>
Nach dem Login kopieren

HTML-Code:

<style type="text/css">
#txtFileName {
width: 300px;
}
.btnsubmit{border-bottom: #cc4f00 1px solid; border-left: #ff9000 1px solid;border-top: #ff9000 1px solid; border-right: #cc4f00 1px solid;text-align: center; padding: 2px 10px; line-height: 16px; background: #e36b0f; height: 24px; color: #fff; font-size: 12px; cursor: pointer;}
</style>
上传图片:<input type="text" id="txtFileName" /><div id="btnUp" style="width:300px;" class=btnsubmit >浏览</div>
<div id="imglist"></div>

Nach dem Login kopieren

JS-Code:

<script type="text/javascript">
$(function () {
var button = $('#btnUp'), interval;
new AjaxUpload(button, {
//action: 'upload-test.php',文件上传服务器端执行的地址
action: '/handler/AjaxuploadHandler.ashx',
name: 'myfile',
onSubmit: function (file, ext) {
if (!(ext && /^(jpg|jpeg|JPG|JPEG)$/.test(ext))) {
alert('图片格式不正确,请选择 jpg 格式的文件!', '系统提示');
return false;
}
// change button text, when user selects file
button.text('上传中');
// If you want to allow uploading only 1 file at time,
// you can disable upload button
this.disable();
// Uploding -> Uploading. -> Uploading...
interval = window.setInterval(function () {
var text = button.text();
if (text.length < 10) {
button.text(text + '|');
} else {
button.text('上传中');
}
}, 200);
},
onComplete: function (file, response) {
//file 本地文件名称,response 服务器端传回的信息
button.text('上传图片(只允许上传JPG格式的图片,大小不得大于150K)');
window.clearInterval(interval);
// enable upload button
this.enable();
var k = response.replace("<PRE>", "").replace("
", ""); if (k == '-1') { alert('您上传的文件太大啦!请不要超过150K'); } else { alert("服务器端传回的串:"+k); alert("本地文件名称:"+file); $("#txtFileName").val(k); $("").appendTo($('#imglist')).attr("src", k); } } }); });
Nach dem Login kopieren

Serverseitiger ajaxuploadhandler.ashx-Code

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
HttpPostedFile postedFile = context.Request.Files[0];
string savePath = "/upload/images/";
int filelength = postedFile.ContentLength;
int fileSize = 163600; //150K
string fileName = "-1"; //返回的上传后的文件名
if (filelength <= fileSize)
{
byte[] buffer = new byte[filelength];
postedFile.InputStream.Read(buffer, 0, filelength);
fileName = UploadImage(buffer, savePath, "jpg");
}
context.Response.Write(fileName);
}
public static string UploadImage(byte[] imgBuffer, string uploadpath, string ext)
{
try
{
System.IO.MemoryStream m = new MemoryStream(imgBuffer);
if (!Directory.Exists(HttpContext.Current.Server.MapPath(uploadpath)))
Directory.CreateDirectory(HttpContext.Current.Server.MapPath(uploadpath));
string imgname = CreateIDCode() + "." + ext;
string _path = HttpContext.Current.Server.MapPath(uploadpath) + imgname;
Image img = Image.FromStream(m);
if (ext == "jpg")
img.Save(_path, System.Drawing.Imaging.ImageFormat.Jpeg);
else
img.Save(_path, System.Drawing.Imaging.ImageFormat.Gif);
m.Close();
return uploadpath + imgname;
}
catch (Exception ex)
{
return ex.Message;
}
}
public static string CreateIDCode()
{
DateTime Time1 = DateTime.Now.ToUniversalTime();
DateTime Time2 = Convert.ToDateTime("1970-01-01");
TimeSpan span = Time1 - Time2; //span就是两个日期之间的差额 
string t = span.TotalMilliseconds.ToString("0");
return t;
}
Nach dem Login kopieren

Bei der Entwicklung von PHP-Websites wird häufig die Datei-Upload-Funktion verwendet. Ich habe zuvor vorgestellt, wie PHP zum Implementieren der Datei-Upload-Funktion verwendet wird. Mit der Entwicklung der WEB-Technologie ist die Benutzererfahrung zum Schlüssel zur Messung des Erfolgs einer Website geworden. Heute werde ich Ihnen ein Beispiel für die Implementierung der Ajax-Datei-Upload-Funktion in PHP vorstellen Es wird eine Funktion zum Hochladen einzelner Dateien und mehrerer Dateien verwendet.

AjaxUpload

Wenn das JQuery-Plug-In AjaxUpload die Datei-Upload-Funktion implementiert, ist es nicht erforderlich, ein Formular-Upload zu erstellen. Natürlich können Sie bei Bedarf auch ein Formular-Upload erstellen.

Vorbereitung

1. Laden Sie das Jquery-Entwicklungspaket und das Datei-Upload-Plug-in AjaxUpload herunter.

2. Erstellen Sie uploadfile.html und stellen Sie das Jquery-Entwicklungspaket und das AjaxUpload-Plug-in vor

<script src="js/jquery-1.3.js"></script>
<script src="js/ajaxupload.3.5.js"></script> 
Nach dem Login kopieren

3. Erstellen Sie entsprechend den Anforderungen des JQuery-Plug-Ins AjaxUpload ein DIV, das die Ajax-Datei-Upload-Funktion auslöst

<ul> 
<li id="example"> 
<div id="upload_button">文件上传</div>
<p>已上传的文件列表:</p> 
<ol class="files"></ol>
</ul> 
Nach dem Login kopieren

Hinweis: Aus dem Code unten können wir ersehen, dass das Jquery-Plug-in AjaxUpload die Funktion zum Hochladen von Dateien basierend auf dem DIV upload_button auslöst.

Front-End-JS-Code

Ich habe im Code einen Schalter eingestellt, der je nach Bedarf dem hochgeladenen Dateityp entspricht, und außerdem festgelegt, ob eine einzelne Datei oder mehrere Dateien im Ajax-Modus hochgeladen werden sollen.

$(document).ready(function(){
var button = $('#upload_button'), interval;
var fileType = "all",fileNum = "one"; 
new AjaxUpload(button,{
action: 'do/uploadfile.php',
/*data:{
'buttoninfo':button.text()
},*/
name: 'userfile',
onSubmit : function(file, ext){
if(fileType == "pic")
{
if (ext && /^(jpg|png|jpeg|gif)$/.test(ext)){
this.setData({
'info': '文件类型为图片'
});
} else {
$('<li></li>').appendTo('#example .files').text('非图片类型文件,请重传');
return false; 
}
}
button.text('文件上传中');
if(fileNum == 'one')
this.disable();
interval = window.setInterval(function(){
var text = button.text();
if (text.length < 14){
button.text(text + '.'); 
} else {
button.text('文件上传中'); 
}
}, 200);
},
onComplete: function(file, response){
if(response != "success")
alert(response);
button.text('文件上传');
window.clearInterval(interval);
this.enable();
if(response == "success");
$('<li></li>').appendTo('#example .files').text(file); 
}
});
}); 
Nach dem Login kopieren

Hinweis:

Zeile 1: $(document).ready()-Funktion, eine Funktion in Jquery, ähnlich wie window.load. Verwenden Sie diese Funktion, um die gebundene Funktion sofort aufzurufen, wenn das DOM geladen und zum Lesen und Bearbeiten bereit ist.

Zeile 3: Die Parameter fileType und fileNum stellen den Typ und die Anzahl der hochgeladenen Dateien dar. Der Standardwert ist, dass alle Dateitypen gleichzeitig hochgeladen werden können Dateien oder mehrere Dateien gleichzeitig, Sie können die Werte dieser beiden Variablen zu pic und mehr machen.

Zeilen 6 bis 8: POST-Daten an den Server Sie können statische Werte festlegen oder einige dynamische Werte über die DOM-Operationsfunktion von Jquery abrufen, z. B. den Wert von INPUT im Formular usw.

Zeile 9: Entspricht Frontend

<input type="file" name="userfile"> 
Nach dem Login kopieren

Serverseitig $_FILES['userfile']

Zeilen 10–36: Funktion wird vor dem Hochladen der Datei ausgelöst.

Zeilen 11–21: Filterfunktion des Bilddateityps. Die JQuery-SetData-Funktion wird verwendet, um den Wert von POST auf dem Server festzulegen.

Zeilen 25–26: Legen Sie fest, ob nur eine Datei oder mehrere Dateien gleichzeitig hochgeladen werden sollen. Wenn nur eine Datei hochgeladen wird, wird die Auslöseschaltfläche deaktiviert. Wenn Sie mehrere weitere Dateien übertragen möchten, stellen Sie bitte den Wert von MAXSIZE im serverseitigen PHP-Datei-Upload-Programm ein. Die Größenbeschränkung der hochgeladenen Dateien hängt natürlich auch von den Einstellungen in der PHP.INI-Datei ab.

Zeilen 28–35: Während des Datei-Upload-Vorgangs wird der Text der Schaltfläche alle 200 Millisekunden dynamisch aktualisiert, wodurch der Effekt dynamischer Eingabeaufforderungen erzielt wird. Die Funktion window.setInterval wird verwendet, um die integrierte Funktion zu jedem angegebenen Zeitpunkt auszuführen. Die Interaktionszeiteinheit ist Millisekunden.

Zeilen 37–49: Die Funktion wird ausgelöst, nachdem die Datei-Upload-Funktion abgeschlossen ist. Wenn der Server gemäß dem Rückgabewert einen Fehler meldet, fordert das Frontend die Fehlermeldung über ALERT an.

Serverseitiger PHP-Datei-Upload-Code

Es basiert im Allgemeinen auf dem zuvor vorgestellten Beispiel-Tutorial für die PHP-Datei-Upload-Funktion. Die Einstellungen für die Datei-Upload-Größe, Fehlermeldungen und andere Anweisungen wurden in diesem Artikel ausführlich erläutert.

$upload_dir = '../file/';
$file_path = $upload_dir . $_FILES['userfile']['name'];
$MAX_SIZE = 20000000;
echo $_POST['buttoninfo'];
if(!is_dir($upload_dir))
{
if(!mkdir($upload_dir))
echo "文件上传目录不存在并且无法创建文件上传目录";
if(!chmod($upload_dir,0755))
echo "文件上传目录的权限无法设定为可读可写";
}
if($_FILES['userfile']['size']>$MAX_SIZE)
echo "上传的文件大小超过了规定大小";
if($_FILES['userfile']['size'] == 0)
echo "请选择上传的文件";
if(!move_uploaded_file( $_FILES['userfile']['tmp_name'], $file_path))
echo "复制文件失败,请重新上传"; 
switch($_FILES['userfile']['error'])
{
case 0:
echo "success" ;
break;
case 1:
echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";
break;
case 2:
echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
break;
case 3:
echo "文件只有部分被上传";
break;
case 4:
echo "没有文件被上传";
break;
}
Nach dem Login kopieren

Zusammenfassung

Grundsätzlich wurde der Prototyp der Front-End-Ajax-Datei-Upload-Triggerfunktion und der serverseitigen PHP-Datei-Upload-Funktion eingeführt. Sie können die Front-End- und Back-End-Codes entsprechend Ihren eigenen Anforderungen oder Ihnen ergänzen kann einige Funktionen trennen, z. B. den Dateityp, die Funktion zum Hochladen einer einzelnen Datei oder mehrerer Dateien. Im Allgemeinen ist es relativ einfach, das JQuery-Plug-In AjaxUpload zu verwenden, um die Funktion zum Hochladen von Dateien zu implementieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage