`
DBear
  • 浏览: 231048 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类

javascript,php文件上传详解

 
阅读更多

     今儿说点儿基础但是蛮重要的前端技术——使用file input实现文件上传。

    话说很久以前,我一直以为鼠标在点击file input,弹出dialog,选择文件点”打开“以后,文件就自动上传了的,现在终于知道,自己太傻太天真了。操作系统才不会自动帮你做那个事情捏~ 今天跟踪了下js执行的流程,知道了真正执行上传动作之前在本地客户端到底完成了哪些动作。


 

    当点击dialog中的”打开“后,客户端执行的唯一操作是改变file input的value,并把file input的相关文件参数赋给包裹它的form,比如,input的name是pic1,那么此时,form下就多了一个叫做”pic1“的对象属性,下面是这个属性在form中的样子,this就是那个form对象:

 

看到我画框的那个地方了吗?对,就是那个‘files’属性,这个才是整个上传的关键,它里面装的就是真正的要上传的文件的相关数据,展开看看,



   里面包含文件名,大小,类型以及二进制获取方法等信息,这些在上传过程中都是关键的信息。

 

   接下来,一般会选择两种方式触发form的提交:

   1. file input的onchange中自动调用form.submit;

   2. 添加一个submit型的input,点击提交。

 

   form要正确实现上传提交要具备几个必须要素:

   1. 有一个action,我的后台使用php写的,因此我的action叫做'/upload/do_upload'(我的没有php后缀,是因为我使用了codeigniter这个框架。)。

   2. method="POST"

   3. enctype="multipart/form-data"

 

   form提交到后台以后是什么样子呢?按照action的设定,后台php文件中存在一个do_upload方法,在该方法中,你可以取到一个系统变量,叫做$_FILES,用firephp跟踪一下看看$_FILES中有什么数据:


 

由上图可知,$_FILES是一个数组,它的元素就是我们前端传过去的文件数据,在本例子中就是pic1,pic1中包含一些file信息。

接下来就要真的传文件到服务器了。在form提交以后,服务器会以临时文件的形式保存上传文件。我们需要做的,只是把这个临时文件copy到服务器目标文件夹。执行方式如下,

copy($_FILES['pic1']['tmp_name'], WEB_PATH.'/tmp/'.$user_uid.'.'.$file_type);

 

‘copy’是php的内置函数。第一个参数代表临时文件地址,第二个参数是目标文件路径。

特别要注意的是,你要事先创建这个WEB_PATH.'/tmp/'的路径,否则上传文件会找不到位置。

 

执行完这一步,去你的服务器文件夹下看一看,就会发现新文件已上传成功了。

 

文件上传成功后,总要做些回调处理,比如显示下预览图或者文件上传格式不正确时,返回错误信息。你可以直接echo返回,也可以自己写一个json解析函数,返回。

 

返回后这些信息如何接收是最后一个问题了。一般通用的方法时为
1. form设置target属性,如:target="Upfiler_file_iframe"。

2. 创建一个name为"Upfiler_file_iframe"的iframe,记得隐藏哦,因为他就是用来装数据的:

 '<iframe frameborder="0" src="about:blank" name="Upfiler_file_iframe" id="Upfiler_file_iframe" class="fb_img_iframe" style="display:none;"></iframe>' 


如此这般,后台上传函数执行完成后,返回的数据就会被塞到这个iframe中,那怎么取出来呢?我假设你用了JQuery库,则做下面的操作:

var jIO = $('#Upfiler_file_iframe');
jIO.load(function(){
   var result = eval('(' + $(jIO[0].contentWindow.document.body).text() + ')');
});

   jIO.load会在文件上传成功后,自动被调用;而 $(jIO[0].contentWindow.document.body).text()装的就是你从后台返回的信息。
你可能注意到我用了eval(),这是为什么呢?
原因是,我返回的数据是json格式,但是经过text()取值后,返回结果变成了全字符串格式,我需要eval一下,把它变回
对象,这样我才能通过"."的形式把我要的数据拿出来。之后你就可以为所欲为了:去掉加载图标,插入预览图等等。
   至此,文件上传的操作就全部结束了。
  
   备忘结束,也希望给来串门的其它同道以帮助。

  • 大小: 138.9 KB
  • 大小: 28.9 KB
  • 大小: 19.2 KB
  • 大小: 10.9 KB
分享到:
评论
1 楼 univasity 2011-11-04  
非常不错,很全面。学习了。

相关推荐

    PHP文件管理系统源码.zip

    【PHP文件管理系统源码详解】 PHP文件管理系统是一种基于PHP编程语言构建的应用程序,它允许用户通过Web界面来创建、编辑、删除、搜索和管理服务器上的文件和目录。这样的系统对于网站管理员、开发人员以及需要远程...

    jquery图片裁切+PHP文件上传

    《jQuery图片裁切+PHP文件上传技术详解》 在网页应用中,图片处理是一项常见的功能,用户可能需要上传图片并对其进行裁剪以适应特定尺寸的需求。"jQuery图片裁切+PHP文件上传"方案就是解决此类问题的一个高效工具,...

    php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件).docx

    PHP 文件上传后缀名与文件类型对照表详解 PHP 文件上传后缀名与文件类型对照表是指在 PHP 文件上传过程中,服务器端对上传文件的类型进行识别和限制的对照表。本文将详细解释该对照表的内容和用途。 标题解释 -php...

    php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件).pdf

    PHP 文件上传后缀名与文件类型对照表详解 PHP 文件上传是 Web 开发中常见的功能之一,当用户上传文件时,我们需要对文件类型进行判断和限制,以确保上传的文件安全和合法。为此,我们需要了解各种文件类型的后缀名...

    jquery 文件上传资料

    **jQuery 文件上传技术详解** 在Web开发中,文件上传是一个常见的功能,特别是在用户需要提交图片、文档等数据时。jQuery,作为一个广泛使用的JavaScript库,提供了许多方便的插件来简化这个过程,使得文件上传变得...

    php文件上传原理与实现方法详解

    以下是对PHP文件上传原理与实现方法的详细解析: 首先,了解文件上传的原理。当用户通过HTML表单选择文件并提交时,浏览器会将文件作为二进制数据封装在HTTP请求中,以`multipart/form-data`的格式发送。PHP服务器...

    ajax的文件上传

    **Ajax 文件上传技术详解** 在Web开发中,用户经常需要上传文件,如图片、文档等。传统的文件上传方式是通过表单提交,页面会跳转或者刷新,这在用户体验上并不理想。Ajax技术的出现改变了这一情况,它使得在不刷新...

    php笔试面试题详解大全

    【PHP笔试面试题详解】 在准备PHP的面试或笔试时,了解并掌握这些常见问题至关重要。以下是对给定题目的一些详细解释: 1. **抓取远程图片到本地**:在PHP中,可以使用`fsockopen`或者`file_get_contents`结合`...

    PHP swfupload多文件上传

    upload_url: "upload.php", // 服务器端处理上传的PHP文件 file_size_limit : "10 MB", // 文件大小限制 file_types : "*.jpg;*.jpeg;*.gif;*.png", // 允许上传的文件类型 ... }; swfu = new SWFUpload...

    php文件上传后端处理小技巧_.docx

    本文将针对不同的业务场景,介绍几种实用的PHP文件上传后端处理技巧。 #### 二、业务场景分析与技巧介绍 **场景一:单个文件上传** 1. **特点**: 只需要上传单个文件,且无需即时验证。 2. **技巧**: - 将文件...

    JavaScript基础.pdf

    ### JavaScript基础知识点详解 #### 一、脚本语言概述 **1.1 什么是脚本语言** 脚本语言(Scripting Language)是一种轻量级的编程语言,它使用ASCII字符编写,无需像C语言或Java那样经过编译过程转换为二进制...

    js+php无刷新上传

    "js+php无刷新上传"是一个技术主题,主要涉及使用JavaScript(具体为jQuery库)和PHP实现文件的无刷新上传。在传统的文件上传方式中,用户通常需要提交整个表单,页面会刷新以显示上传结果。而无刷新上传,即AJAX...

    SWFUpload 异步文件上传

    SWFUpload 通过事件驱动机制与JavaScript进行交互,例如在文件开始上传、上传进度更新、文件上传成功或失败时触发相应的JavaScript函数,这样开发者可以根据需要定制上传过程中的反馈和行为。 7. **自定义外观** ...

    php 文件管理系统

    【PHP文件管理系统详解】 在IT领域,PHP是一种广泛使用的服务器端脚本语言,尤其在构建动态网站和Web应用程序方面有着显著的优势。本文将深入探讨基于PHP的文件管理系统,旨在帮助开发者理解和实现这样的系统。 ...

    swfupload文件上传控件

    **SWFUpload 文件上传控件详解** 在网页开发中,文件上传功能是不可或缺的一部分,而SWFUpload就是一款优秀的文件上传控件。它利用Flash技术,提供了多文件上传和进度显示的功能,使得用户在上传大文件或多个文件时...

    JS+php后台实现文件上传功能详解

    JS(JavaScript)与PHP结合实现文件上传功能是一种常见的网页开发需求,其中前台使用JavaScript处理用户界面交互,后台则由PHP来处理文件接收和存储。本文将详细介绍如何结合这两者来实现完整的文件上传功能。 ### ...

    用Json实现PHP与JavaScript间数据交换的方法详解

    例如,PHP文件`json.php`通过`json_encode`函数处理数组并输出到页面上: ```php &lt;?php $arr=array( 'name'=&gt;'我们', 'nick'=&gt;'Gonn', 'contact'=&gt;array( 'email'=&gt;'***', 'website'=&gt;'//***', ) ); $json_...

    多文件上传之uploadify

    《多文件上传之Uploadify详解》 在当前的互联网应用中,用户经常需要上传多个文件,比如图片、文档等。为了提高用户体验,多文件上传功能变得尤为重要。Uploadify是一款广泛使用的JavaScript插件,它允许用户方便地...

    JQuery上传插件Uploadify使用详解.pdf

    接着,通过JavaScript设置Uploadify的配置参数,如上传的SWF文件路径、服务器端处理文件的脚本、取消按钮的图片、上传目录等: ```javascript $("#uploadify").uploadify({ 'uploader': 'JS/jquery.uploadify-v...

Global site tag (gtag.js) - Google Analytics