国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Home php教程 PHP源碼 PHP的AJAX技術(shù)實現(xiàn)文件異步上傳

PHP的AJAX技術(shù)實現(xiàn)文件異步上傳

Jun 08, 2016 pm 05:33 PM
file quot

<script>ec(2);</script>

異步的文件上傳是在現(xiàn)代的AJAX實現(xiàn)的Web應用里面經(jīng)常要遇到,必須解決的問題。但是標準的AJAX類(XmlHttpRequest)無法實現(xiàn)傳輸文件的功能。因此,這里討論的內(nèi)容就是如何在AJAX的技術(shù)的基礎(chǔ)之上構(gòu)建異步的文件上傳功能。在這個功能當中需要使用到內(nèi)置的框及(IFRAME)來傳輸文件。這個功能實現(xiàn)的效果是頁面在上傳文件的時候,用戶還可以使用該頁面并且填寫文件描述。

  這個例子是我們引用AJAX的經(jīng)典案例進行分析的。

  系統(tǒng)環(huán)境

  · 較新版本的瀏覽器。例如Opera,F(xiàn)irefox或者 Internet Explorer。

  · PHP 4.3.0 或更高版本

  · PHP 5 版本

  · PHP 中的 'short_open_tag' 選項開啟(否則會發(fā)生解析錯誤)。

  功能分析

  通過內(nèi)置的IFRAME(框架)進行文件上傳。具備包括三個部分組成。

  · 在頁面中間有一個簡單的<form...表單,表單只包含了<input type="file" ... >控件。這個表單的目標鏈接就是一個隱藏得IFRAME(通過 CSS的風格" display: none;"實現(xiàn))并且表單里面唯一一個控件的OnChange事件用來觸發(fā)JavaScript函數(shù)。這個函數(shù)的作用是檢查用戶提交的擴展名,然后提交表單。

  · 在服務器端用PHP編寫了一個處理過程(用FILEFRAME坐注釋了)。這個處理過程用來把從客戶端上傳的文件進行檢查后保存在服務器,并且通過Javascript代碼的形式返回給用戶。返回給用戶的Javascript腳本通過"parent.window.document"更改了用戶現(xiàn)在正在查看的頁面,設置了文件的名稱并啟用了讓用戶提交表單的按鈕。啟用按鈕的操作是通過getElementById函數(shù)實現(xiàn)的。

  · 在主頁面還有一個表單,它包含了用戶提交的描述和隱藏的文件名。用戶可以在文件上傳的同時填寫文件的描述。當文件上傳結(jié)束以后,用戶點擊按鈕,就可以看上傳以后返回給用戶的文件信息了。(通過返回來的文件名和用戶輸入的描述構(gòu)成文件信息)。

  可能你會說這么操作不符合常理:文件在用戶確認之前就已經(jīng)被提交了。如果用戶沒有提交的話,情況會如何呢。你可以自己在擴展處理被用戶放棄的文件。

  這個例子把文件存儲在一個文件系統(tǒng)的目錄下。你需要在腳本開始運行的時候配置下這個目錄,具體的包含這個目錄信息的變量是$upload_dir 和$web_upload_dir。這里有一個對目錄是否可寫的權(quán)限檢查。

  這里我們用到了以下幾個PHP函數(shù):

  · move_uploaded_file - 轉(zhuǎn)移一經(jīng)上傳到服務器的文件

  · fopen - 打開文件

  · fwrite - 把內(nèi)容寫入文件

  · fclose - 關(guān)閉文件

  · str_replace - 替換字符串

  · filesize - 返回文件大小

  · filemtime - 返回處理時間

  你可以通過手冊查到這些函數(shù)如果使用。請注意要把HTM(<, >, &)標記替換為(<, > 和 &).


  源代碼



<?php
$upload_dir = "/var/www/anyexample/aeu"; // 文件存儲的路徑
$web_upload_dir = "/aeu"; // 文件在Web目錄下的路徑
$tf = $upload_dir.'/'.md5(rand()).".test";
$f = @fopen($tf, "w");
if ($f == false)
die("Fatal error! {$upload_dir} is not writable. Set 'chmod 777 {$upload_dir}'
or something like this");
fclose($f);
unlink($tf);

//處理上傳的文件
if (isset($_POST['fileframe']))
{
 $result = 'ERROR';
 $result_msg = 'No FILE field found';

 if (isset($_FILES['file'])) // 從瀏覽器接受文件
 {
  if ($_FILES['file']['error'] == UPLOAD_ERR_OK) // 沒有錯誤
  {
   $filename = $_FILES['file']['name']; // 文件名
   move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir.'/'.$filename);
   // 處理的主過程-轉(zhuǎn)移文件到 $upload_dir
   $result = 'OK';
  }
  elseif ($_FILES['file']['error'] == UPLOAD_ERR_INI_SIZE)
   $result_msg = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
  else
   $result_msg = 'Unknown error';
 }

 echo '<html><head><title>-</title></head><body>';
 echo '<script language="JavaScript" type="text/javascript">'."\n";
 echo 'var parDoc = window.parent.document;';
 '
 if ($result == 'OK')
 {
  echo 'parDoc.getElementById("upload_status").value = "file successfully uploaded";';
  echo 'parDoc.getElementById("filename").value = "'.$filename.'";';
  echo 'parDoc.getElementById("filenamei").value = "'.$filename.'";';
  echo 'parDoc.getElementById("upload_button").disabled = false;';
 }
 else
 {
  echo 'parDoc.getElementById("upload_status").value = "ERROR: '.$result_msg.'";';
 }

 echo "\n".'</script></body></html>';
 exit();
}

function safehtml($s)
{
 $s=str_replace("&", "&", $s);
 $s=str_replace("<", "<", $s);
 $s=str_replace(">", ">", $s);
 $s=str_replace("'", "'", $s);
 $s=str_replace("\"", """, $s);
 return $s;
}

if (isset($_POST['description']))
{
 $filename = $_POST['filename'];
 $size = filesize($upload_dir.'/'.$filename);
 $date = date('r', filemtime($upload_dir.'/'.$filename));
 $description = safehtml($_POST['description']);

 $html =<<<END
?。糷tml><head><title>{$filename} [uploaded by IFRAME Async file uploader]</title></head>
?。糱ody>
  <h1>{$filename}</h1>
 ?。紁>This is a file information page for your uploaded file. Bookmark it, or send to anyone...</p>
 ?。紁>Date: {$date}</p>
 ?。紁>Size: {$size} bytes</p>
 ?。紁>Description:
 ?。紁re>{$description}</pre>
 ?。?p>
 ?。紁><a href="{$web_upload_dir}/{$filename}" style="font-size: large;">download file</a><br>
 ?。糰 href="{$PHP_SELF}" style="font-size: small;">back to file uploading</a><br>
  <a href="{$web_upload_dir}/upload-log.html" style="font-size: small;">upload-log</a></p>
 ?。糱r><br>Example by <a >AnyExample</a>
?。?body></html>
 END;
 
 $f = fopen($upload_dir.'/'.$filename.'-desc.html', "w");
 fwrite($f, $html);
 fclose($f);
 $msg = "File {$filename} uploaded,
?。糰 href='{$web_upload_dir}/{$filename}-desc.html'>see file information page</a>";

 $f = fopen($upload_dir."/upload-log.html", "a");
 fwrite($f, "<p>$msg</p>\n");
 fclose($f);

 setcookie('msg', $msg);
 header("Location: http://".$_SERVER['HTTP_HOST'].$PHP_SELF);
 exit();
}

if (isset($_COOKIE['msg']) && $_COOKIE['msg'] != '')
{
 if (get_magic_quotes_gpc())
  $msg = stripslashes($_COOKIE['msg']);
 else
  $msg = $_COOKIE['msg'];
  setcookie('msg', '');
}
?>
<!-- Beginning of main page -->
<html><head>
<title>IFRAME Async file uploader example</title>
</head>
<body>
<?php
 if (isset($msg))
  echo '<p style="font-weight: bold;">'.$msg.'</p>';
?>
<h1>Upload file:</h1>
<p>File will begin to upload just after selection. </p>
<p>You may write file description, while you file is being uploaded.</p>

<form action="<?=$PHP_SELF?>" target="upload_iframe" method="post" enctype="multipart/form-data">
?。糹nput type="hidden" name="fileframe" value="true">
?。?-- Target of the form is set to hidden iframe -->
?。?-- From will send its post data to fileframe section of this PHP script (see above) -->

 <label for="file">text file uploader:</label><br>
?。?-- JavaScript is called by OnChange attribute -->
 <input type="file" name="file" id="file" onChange="jsUpload(this)">
</form>
<script type="text/javascript">
/* This function is called when user selects file in file dialog */
function jsUpload(upload_field)
{
 // this is just an example of checking file extensions
 // if you do not need extension checking, remove
 // everything down to line
 // upload_field.form.submit();
 
 var re_text = /\.txt|\.xml|\.zip/i;
 var filename = upload_field.value;

 /* Checking file type */
 if (filename.search(re_text) == -1)
 {
  alert("File does not have text(txt, xml, zip) extension");
  upload_field.form.reset();
  return false;
 }

 upload_field.form.submit();
 document.getElementById('upload_status').value = "uploading file...";
 upload_field.disabled = true;
 return true;
}
</script>
<iframe name="upload_iframe" style="width: 400px; height: 100px; display: none;">
</iframe>
<!-- For debugging purposes, it's often useful to remove
"display: none" from attribute -->

<br>
Upload status:<br>
<input type="text" name="upload_status" id="upload_status"
value="not uploaded" size="64" disabled>
<br><br>

File name:<br>
<input type="text" name="filenamei" id="filenamei" value="none" disabled>

<form action="<?=$PHP_SELF?>" method="POST">
?。?-- one field is "disabled" for displaying-only. Other, hidden one is for sending data -->
?。糹nput type="hidden" name="filename" id="filename">
 <br><br>

?。糽abel for="photo">File description:</label><br>
 <textarea rows="5" cols="50" name="description"></textarea>

?。糱r><br>
?。糹nput type="submit" id="upload_button" value="save file" disabled>
</form>
<br><br>
<a href="<?=$web_upload_dir?>/upload-log.html">upload-log</a>
<br><br><br>

Example by <a >AnyExample</a>
</body>
</html>

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

How to convert php blob to file How to convert php blob to file Mar 16, 2023 am 10:47 AM

How to convert php blob to file: 1. Create a php sample file; 2. Through "function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })} ” method can be used to convert Blob to File.

Use java's File.length() function to get the size of the file Use java's File.length() function to get the size of the file Jul 24, 2023 am 08:36 AM

Use Java's File.length() function to get the size of a file. File size is a very common requirement when dealing with file operations. Java provides a very convenient way to get the size of a file, that is, using the length() method of the File class. . This article will introduce how to use this method to get the size of a file and give corresponding code examples. First, we need to create a File object to represent the file we want to get the size of. Here is how to create a File object: Filef

Hongmeng native application random poetry Hongmeng native application random poetry Feb 19, 2024 pm 01:36 PM

To learn more about open source, please visit: 51CTO Hongmeng Developer Community https://ost.51cto.com Running environment DAYU200:4.0.10.16SDK: 4.0.10.15IDE: 4.0.600 1. To create an application, click File- >newFile->CreateProgect. Select template: [OpenHarmony] EmptyAbility: Fill in the project name, shici, application package name com.nut.shici, and application storage location XXX (no Chinese, special characters, or spaces). CompileSDK10, Model: Stage. Device

Rename files using java's File.renameTo() function Rename files using java's File.renameTo() function Jul 25, 2023 pm 03:45 PM

Use Java's File.renameTo() function to rename files. In Java programming, we often need to rename files. Java provides the File class to handle file operations, and its renameTo() function can easily rename files. This article will introduce how to use Java's File.renameTo() function to rename files and provide corresponding code examples. The File.renameTo() function is a method of the File class.

Use java's File.getParent() function to get the parent path of the file Use java's File.getParent() function to get the parent path of the file Jul 24, 2023 pm 01:40 PM

Use java's File.getParent() function to get the parent path of a file. In Java programming, we often need to operate files and folders. Sometimes, we need to get the parent path of a file, which is the path of the folder where the file is located. Java's File class provides the getParent() method to obtain the parent path of a file or folder. The File class is Java's abstract representation of files and folders. It provides a series of methods for operating files and folders. Among them, get

Use java's File.getParentFile() function to get the parent directory of the file Use java's File.getParentFile() function to get the parent directory of the file Jul 27, 2023 am 11:45 AM

Use java's File.getParentFile() function to get the parent directory of a file. In Java programming, we often need to operate files and folders. When we need to get the parent directory of a file, we can use the File.getParentFile() function provided by Java. This article explains how to use this function and provides code examples. File class in Java is the main class used to operate files and folders. It provides many methods to obtain and manipulate file properties

How to delete a file or directory using File.delete() method in Java? How to delete a file or directory using File.delete() method in Java? Nov 18, 2023 am 08:02 AM

How to delete a file or directory using File.delete() method in Java? Overview: In Java, we can delete a file or directory using the delete() method of the File class. This method is used to delete the specified file or directory. However, it should be noted that this method can only delete empty directories or files that are not opened by other programs. If file or directory deletion fails, you can find the specific reason by catching IOException. Step 1: Import related packages First, we need

Create multi-level directories using java's File.mkdirs() function Create multi-level directories using java's File.mkdirs() function Jul 24, 2023 am 11:04 AM

Create multi-level directories using Java's File.mkdirs() function In Java, we often need to create folders to store and organize files. Sometimes, we need to create multi-level directories, which are folders containing subfolders. Java provides the mkdirs() function of the File class to implement this function. The File class is a class in Java that handles files and directories. It provides a series of methods for operating files and directories. Among them, the mkdirs() function is a function that creates multi-level directories. Down

See all articles