HTML5 JavaScript 文件上传

function fileUpload(targetUrl) {

    // 隐藏表单名称
    var inputName = ‘_fileselect‘;

    // 文件尺寸
    this.fileSize = 0;

    // 上传表单名称
    var formName = ‘‘;

    var callback = new Object();

    // 初始化函数
    function init() {
    this.uploadUrl = targetUrl;
    var btnObject = getFileObject();
    btnObject.onchange=function(){
        var fileObj = getFileObject();
        var fd = createForm(fileObj);
        var xhr = new XMLHttpRequest();
        xhr.upload.addEventListener("progress", listenerProcess, false);
        xhr.addEventListener("load", listenerLoad, false);
        xhr.addEventListener("error", listenerError, false);
        xhr.addEventListener("abort", listenerAbort, false);
        xhr.open("POST", targetUrl);
        xhr.send(fd);
    };
    }

    // 获取表单对象
    function getFileObject(){
    if(!document.getElementById(inputName)){
        var btn=document.createElement("input");
        btn.setAttribute("type","file");
        btn.setAttribute("style","display:none;");
        btn.setAttribute("id",inputName);
        document.body.appendChild(btn);
    }
    return document.getElementById(inputName);
    }

    // 选在文件
    this.selectFile = function(name){
    formName = name;
    document.getElementById("_fileselect").click();
    }

    // 外部流程监听
    this.processListener = function(callbackProcess,callbackFinish){
    callback.process = callbackProcess;
    callback.finish = callbackFinish;
    }

    // 生成表单对象
    function createForm(fileObj){
        var fd = new FormData();
        this.fileSize = fileObj.files[0].size;
        fd.append(formName, fileObj.files[0]);
        return fd;
    }

    // 处理进度响应监听
    function listenerProcess(evt){
    callback.process(evt.position / evt.totalSize * 100);
    }

    // 处理完成响应监听
    function listenerLoad(evt){
    callback.finish(evt.target.responseText);
    }

    // 处理错误响应监听
    function listenerError(evt){}

    // 处理终止响应监听
    function listenerAbort(evt){}

    // 主动初始化
    init();
}

[ 调用 ]

// 实例化对象的时候,上传URL为参数
var fileObj = new fileUpload(‘/user_center/user_place/upload_logo‘);

// 上传监听 第一个参数为上传进度通知,第二个参数为上传完成服务器的返回
fileObj.processListener(function(val){
    // 上传进程处理
},function(val){
    var obj = eval(‘(‘+val+‘)‘);
    if(obj.state==‘1‘){
        $(‘#preView‘).attr(‘src‘,obj.url);
        $(‘input[name="placelogo"]‘).val(obj.url);
    }else{
        alert(obj.error);
    }
});

// 上传按钮点击时候触发下面方法,参数为表单名称
fileObj.selectFile(‘logo‘);
时间: 2024-08-23 23:18:25

HTML5 JavaScript 文件上传的相关文章

MVC中使用Ajax和HTML5实现文件上传功能

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功能 高级功能:通过拖拽文件的操作实现多个文件上传功能 背景 HTML5提供了一种标准的访问本地文件的方法——File API规格说明,通过调用File API 能够访问文件信息,也可以利用客户端来验证上传文件的类型和大小是否规范. 该规格说明包含以下几个接口来使用文件: File接口:具有文件的“读

JavaScript文件上传和下载

前一段时间做附件的上传和下载功能.期间遇到不少问题,网上找的方法都不算完整.这里把前端和后端的实现都整理一下. 需要的东西:JQuery,Pako.js,base64.js.其中pako/base64是为了对上传的文件进行压缩而使用.如果前端有对文件进行压缩,那么后端也应该对应进行解压. 上传最简单的实现:前端选择一个文件-读取文件信息-通过ajax请求后端方法把文件信息传输并保存(当然,当文件太大,在客户端应该要分批读取并上传,在服务端也是依次分批保存) HTML只需要一个input <inp

MVC5:使用Ajax和HTML5实现文件上传功能

引言 在实际编程中,经常遇到实现文件上传并显示上传进度的功能,基于此目的,本文就为大家介绍不使用flash 或任何上传文件的插件来实现带有进度显示的文件上传功能. 基本功能:实现带有进度条的文件上传功能 高级功能:通过拖拽文件的操作实现多个文件上传功能 背景 HTML5提供了一种标准的访问本地文件的方法--File API规格说明,通过调用File API 能够访问文件信息,也可以利用客户端来验证上传文件的类型和大小是否规范. 该规格说明包含以下几个接口来使用文件: File接口:具有文件的"读

html5大文件上传解决方案(500M以上)

关键部分 前端用file.slice()分块 前端用FileReader获取每一分块的md5值 后端用MultipartFile接受分块文件 后端用FileOutputStream拼装分块文件 话不多说,直接上代码,我想这是你们最喜欢的 工程截图 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><% String path = request

使用html5实现文件上传进度条

html <div id="file"> <input type="file" name="ver" id="ver"/> <font color="red">*(apk,ipa目前为自动重命名)</font><br /> <div class="progress"><span class="bgpr

html5大文件上传解决方案支持分片断点上传

核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开始. 如何分,利用强大的js库,来减轻我们的工作,市场上已经能有关于大文件分块的轮子,虽然程序员的天性曾迫使我重新造轮子.但是因为时间的关系还有工作的关系,我只能罢休了.最后我选择了百度的WebUploader来实现前端所需. 如何合,在合之前,我们还得先解决一个问题,我们如何区分分块所属那个文件的

HTML5 大文件上传示例

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>HTML5大文件分片上传</title> <script src="js/spark-md5.min.js" type="text/javascript" charset="utf-8"></script> <

前端开发之旅- 移动端HTML5实现文件上传

一. 在一个客户的webapp项目中需要用到 html5调用手机摄像头,找了很多资料,大都是 js调用api  然后怎样怎样,做了几个demo测试发现根本不行, 后来恍然大悟,用html5自带的 input file=""  ,纯html5,并且不涉及到js ,就可以实现.代码如下: <input type="file" accept="image/*" capture="camera"> <input ty

Html5添加文件上传组件美化插件教程

一.安装 $ bower install jquery.filer 二.使用方法 <link href="./css/jquery.filer.css" type="text/css" rel="stylesheet" /> <link href="./css/themes/jquery.filer-dragdropbox-theme.css" type="text/css" rel=&q