文件上传控件,做到可以任意删除追加一张图片(或者视频)

思路:把所有的文件对象缓存到临时数组里,在提交的时候在从数组里面取出来。

//选择文件后处理
$("input[type=‘file‘]").change(function(event) {
var $textObj = $(this).parent().find("input[type=‘text‘]");
$textObj.val($(this).val());
});

/******************* 图片上传控制开始 ****************************************/
//选择图片文件处理
$("#btn_selImage").click(function(event) {
var fileObj = document.getElementById("fil_UploadImage");

// 清空文件
var form=document.createElement(‘form‘);
document.body.appendChild(form);
//记住file在旧表单中的的位置
var pos=fileObj.nextSibling;
form.appendChild(fileObj);
form.reset();
pos.parentNode.insertBefore(fileObj,pos);
document.body.removeChild(form);

// 调用file控件
fileObj.click();
});

// 选择图片后上传预览图片
$("#fil_UploadImage").change(function(event) {

// 上传文件列表取得
var files = event.target.files;
var file;
// 上传文件列表的文件全路径取得
var arrFiles = $("#fil_UploadImage").val().split(",");
for (var k=0;k<files.length;k++){
var filepath = "file:///" + arrFiles[k];
// 第一个之后的路径头多一个空格,需去掉
if (k > 0) {
filepath = filepath.substring(1);
}
var filename = filepath.substring(filepath.lastIndexOf("\\")+1);
// 取得文件
file = files[k];

// 上传图片大小超过10*1020*1024的场合提示错误
if (file.size > 10*1020*1024) {
alert("上传文件大小已超过最大允许上传大小(10M),请重新上传。文件名:" + filename);
return;
}
// 文件已经存在的场合再次上传提示脱误
var fileDiv = $("#div_ImageList");
var $parentFileBox = fileDiv.find(‘.parentFileBox‘);
try {
$parentFileBox.children(‘.fileBoxUl‘).find(‘li‘).each(function(){
var fileNameOld = $(this).attr("id").replace("fileBox_","");
if (fileNameOld == filename.replace(".","")) {
throw "同名文件已经上传,请不要重复上传文件。文件名:" + filename;
return;
}
})
} catch(e) {
alert(e);
return;
}

// 添加到预览区域
createBox("div_ImageList", file, filepath, false, false);

// 保存文件数据
ImageData[file.name.replace(".","")] = file;
}
})

// 选择图片后上传图片
$("#btn_UploadImage").click(function(event) {

// 按照缩略图从数据文件中构造FormData并且提交上传
var fileDiv = $("#div_ImageList");
var $parentFileBox = fileDiv.find(‘.parentFileBox‘);
var formData = new FormData();
$parentFileBox.children(‘.fileBoxUl‘).find(‘li‘).each(function(){
var fileName = $(this).attr("id").replace("fileBox_","");
formData.append(fileName , ImageData[fileName]);
})

// 进行异步文件上传处理
$.ajax({
type: "POST",
url: "/case/taskcreate/doUploadImage",
data: formData ,
processData : false,
//必须false才会自动加上正确的Content-Type
contentType : false ,
xhr: function(){
var xhr = $.ajaxSettings.xhr();
if(onprogress && xhr.upload) {
xhr.upload.addEventListener("progress" , onprogress, false);
return xhr;
}
},
xhrFields: {
withCredentials: true
},
beforeSend: function(xhr) {
//请求前的处理
xhr.setRequestHeader($("meta[name=‘_csrf_header‘]").attr("content"), $("meta[name=‘_csrf‘]").attr("content"));
var msg = "文件上传中...,进度0%。";
ShowMessageDialog(‘process‘, msg);
},
success: function(req) {
//请求成功时处理
if($(‘#false‘).length > 0){
$(‘#g_all‘).remove();
$(‘#g_box‘).remove();
$(‘#g_css‘).remove();
}
if(req != ""){
$("")
// 图片上传组件初期化
var urlArray = eval("(" + JSON.stringify(req) + ")");
for ( var jsonUnit in urlArray) {
var tmpstr = "img[name=‘"+jsonUnit+"‘]";
$(tmpstr).eq(0).attr(‘src‘, urlArray[jsonUnit]);
}
}else{
var msg = "文件上传失败。";
ShowMessageDialog(‘error‘, msg);
}

},
error: function(req) {
//请求出错处理
if($(‘#false‘).length > 0){
$(‘#g_all‘).remove();
$(‘#g_box‘).remove();
$(‘#g_css‘).remove();
}
var msg = "文件上传失败。";
ShowMessageDialog(‘error‘, msg);
}
});
})
/******************* 图片上传控制结束 ****************************************/

/*
* 生成文件预览区域
*
* @param divId Div的ID
* @param file 文件
* @param filepath 文件全路径
* @param disDownLoad 是否显示下载按钮
* @param disPlay 是否显示播放按钮
* @param mrl 播放时的文件路径
*
* @return 无
*
*/
function createBox(divId, file, filepath, disDownLoad, disPlay, mrl) {

var fileInput = $(‘#‘+divId);

var file_name = file.name.replace(".","");
var $parentFileBox = fileInput.find(‘.parentFileBox‘);
//添加父系容器;
if ( $parentFileBox.length <= 0 ) {
var div = ‘<div class="parentFileBox"> \ <ul class="fileBoxUl"></ul>\ </div>‘;
fileInput.append( div );
$parentFileBox = fileInput.find(‘.parentFileBox‘);
}

//添加子容器;
var li = ‘<li id="fileBox_‘+file_name+‘" class="diyUploadHover"> \ <div class="viewThumb"></div> \ ‘;
// 显示download按钮
if (disDownLoad) {
li += ‘<div class="diyDownLoad"></div> \ ‘;
}
// 显示播放按钮
if (disPlay) {
li += ‘<div class="diyPlayVideo"></div> \ ‘;
}
li += ‘<div class="diyCancel"></div> \ <div class="diyFileName">‘+file.name+‘</div> \ </li>‘;

// 追加缩略图元素
$parentFileBox.children(‘.fileBoxUl‘).append(li);

// 取得图片容器
var $fileBox = $(‘#fileBox_‘+file_name);

//绑定取消事件;
$fileBox.children(‘.diyCancel‘).one(‘click‘,function(){
removeLi($(this).parent(‘li‘),file_name);
});
// 绑定播放路径,并打开播放窗口
$fileBox.children(‘.diyPlayVideo‘).one(‘click‘,function(){
$(‘#vlc‘)[0].playlist.add(filepath);
$(‘#vlc‘)[0].video.aspectRatio = "16:9";
openDialog("1", "div_play_window");
});
$("#div_play_window").children(‘.play_window_close‘).one(‘click‘,function(){
closeDialog(‘1‘);
});

// 缩略图的显示设置
if ( file.type.split("/")[0] == ‘video‘ ) {
$fileBox.addClass("avi_diy_bg");
return;
} else if ( file.type.split("/")[0] == ‘image‘ ){
// 获取 window 的 URL 工具
var URL = window.URL || window.webkitURL;
var imgURL;
imgURL = URL.createObjectURL(file);
// 追加图片
$fileBox.find(‘.viewThumb‘).append(‘<img src="‘+imgURL+‘" />‘);
}
}

/*
* 清空预览区域
*
* @param $li Li标签
* @param file_name 文件名
*
* @return 无
*
*/
function removeLi ( $li ,file_name) {

if ( $li.siblings(‘li‘).length <= 0 ) {
$li.parents(‘.parentFileBox‘).remove();
} else {
$li.remove();
}
}

时间: 2024-10-15 05:02:08

文件上传控件,做到可以任意删除追加一张图片(或者视频)的相关文章

如何清空文件上传控件里的选定文件(路径)

我又来扯鸡毛蒜皮了.有名言曰人生短得不够扯鸡毛蒜皮,但我的工作就是由无数的鸡毛蒜皮组成,如之奈何? 今天的鸡毛和蒜皮是:如何清空文件上传控件里的选定文件(路径)? 场景是酱紫的: 有一个上传控件和一个按钮,其中上传控件隐藏.点击按钮,触发上传控件点击事件,于是弹出文件选择对话框:选好文件后,于是触发了上传控件的onchange事件.在这个事件里,将文件上传. 有点装逼,就是隐藏了上传控件.这可能是出于界面简约的考虑.问题是,同一个文件不能连续上传2次,因为路径不变,没有触发onchange事件.

在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件

在WebBrowser中通过模拟键盘鼠标操控网页中的文件上传控件 引言 这两天沉迷了Google SketchUp,刚刚玩够,一时兴起,研究了一下WebBrowser. 我在<WebBrowser控件使用技巧分享>一文中曾谈到过"我现在可以通过WebBrowser实现对各种Html元素的操控,唯独无法控制Html的上传控件",出于安全原因,IE没有对上传控件提供操控支持,这使得我们没法像控制其他控件一样用简单的代码进行赋值. 比较实际的解决方案就是模拟操作了,下面我就将演示

ASP.NET使用文件上传控件上传图片

ASPX代码 <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

改变FileUpload文件上传控件的显示方式,确认后上传

一.Aspx页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="FileUploadDemo.aspx.cs" Inherits="WebApplication1.FileUploadDemo" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&qu

jquery文件上传控件 Uploadify

(转自 http://www.cnblogs.com/mofish/archive/2012/11/30/2796698.html) 基于jquery的文件上传控件,支持ajax无刷新上传,多个文件同时上传,上传进行进度显示,删除已上传文件. 要求使用jquery1.4或以上版本,flash player 9.0.24以上. 有两个版本,一个用flash,一个是html5.html5的需要付费~所以这里只说flash版本的用法. 官网:http://www.uploadify.com/ 控件截图

怎样清空文件上传控件里的选定文件(路径)

我又来扯鸡毛蒜皮了. 有名言曰人生短得不够扯鸡毛蒜皮,但我的工作就是由无数的鸡毛蒜皮组成,如之奈何? 今天的鸡毛和蒜皮是:怎样清空文件上传控件里的选定文件(路径)? 场景是酱紫的: 有一个上传控件和一个button.当中上传控件隐藏.点击button,触发上传控件点击事件,于是弹出文件选择对话框:选好文件后.于是触发了上传控件的onchange事件.在这个事件里.将文件上传. 有点装逼,就是隐藏了上传控件. 这可能是出于界面简约的考虑.问题是.同一个文件不能连续上传2次.由于路径不变,没有触发o

文件上传控件值发生变化后自动提交表单

当文件上传控件发生变化后自动提交表单,首先在页面加载完成后注册change事件,然后检测到值得变化后提交上传代码,代码备忘. <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> window.

.Net 使用文件上传控件FileUpload上传图片

例1: 来源:http://long546324.iteye.com/blog/349946 Default.aspx文档: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1

因用了NeatUpload大文件上传控件而导致Nonfile portion &gt; 4194304 bytes错误的解决方法

今天遇到一个问题,就是"NeatUpload大文件上传控件而导致Nonfile portion > 4194304 bytes错误",百度后发现了一个解决方法,跟大家分享下: NeatUpload是一个开源的大文件上传控件,非常的强大,支持文件类型过滤.上传进度条显示.多文件上传等强大的功能. 但部署至项目后,有些地方用普通的FileUpload上传时却发生了一个错误(Nonfile portion > 4194304 bytes,文件大于默认值4M),因如果用NeatUp

AngularJS 文件上传控件 ng-file-upload

网上可以找到的 AngularJS 的文件上传控件有两个: angular-file-upload:https://github.com/nervgh/angular-file-upload ng-file-upload:https://github.com/danialfarid/ng-file-upload 这两个非常类似,连js文件的结构都是一样的.核心的js是.min.js,还都有一个-shim.min.js,用来支持上传进度条和上传暂停等高级功能. 按道理讲shim.js应该是可加可不