如何清除FileUpload中的文件
答案:2 悬赏:40 手机版
解决时间 2021-01-24 10:07
- 提问者网友:杀生予夺
- 2021-01-23 11:25
如何清除FileUpload中的文件
最佳答案
- 五星知识达人网友:北城痞子
- 2021-01-23 12:47
对于file值是只读的,我们没有办法去改变它,不过一些变相的方法还是可以的。 方法一:上传控件基础知识说明:上传控件(input type="file"/)用于在客户端浏览并上传文件,用户选取的路径可以由value属性获取,但value属性是只读的,不能通过javascript来赋值,这就使得不能通过value=""语句来清空它。很容易理解为什么只读,如果可以随意赋值的话,那么用户只要打开你的网页,你就可以随心所欲的上传他电脑上的文件了,呵呵,毕竟表单的submi是可以随便调用的。而上传控件又没有一个clear()之类的函数,所以这使得无刷新上传文件显得稍稍不爽,尤其对于追求完美的开发者而言。然而今天在做一个Asp.net控件时却发现不得不需要清空一下上传控件,于是便开始想办法。网上搜索一番,不出所料,没有找到什么结果。关键时刻只能靠自己了。仔细想想,上传控件是不是任何时候都不可能被清空呢?答案是否,form.reset()方法能够重置所有得表单元素。只要调用inputFile.form.reset(),那么上传控件的值就清空了,不要担心它被恢复为某个默认值,value是只读的,你不能为它设置某个初始值。于是开始设想,如果我只需要reset一下上传控件,怎么解决?其他的表单元素要保持原状。一个可行的方法是,reset之前获取所有的表单域的值,之后再用这些值填充,虽然显得稍微复杂,但借助prototype框架的Form对象提供的方法,还是很容易做到的。这样就能够得到需要的结果了。然而这个方法还是不够优雅,沿着思路继续想下去,不难得到改进的方法:创建一个新的form,把上传控件临时放过来,再调用这个form的reset方法,完工之后再把上传控件弄回去。这个form无需进入DOM结构便能正常工作,所以不用担心会对界面有任影响。下面给出函数实现,经过验证工作良好,呵呵。程序代码//清空文件上传框function clearFileInput(file){ var form=document.createElement('form'); document.body.appendChild(form); //记住file在旧表单中的的位置 var pos=file.nextSibling; form.appendChild(file); form.reset(); pos.parentNode.insertBefore(file,pos); document.body.removeChild(form);}方法2 用这个方法不能保存input的样式比较简单了 重新建立个 file 就可以了。程序代码span id=span1 input name=ab type=file /span input name=button1 type=button value="按" onclick=show() script language=javascript function show() { document.getElementById("span1").innerHTML="input name=ab type=file } /script 方法3,用这个方法可以保存input的样式 input name=button1 type=button value="按" onclick=show() script language=javascript function show() { var e=document.getElementById("span1"); e.outerHTML=e.outerHTML; } /script
全部回答
- 1楼网友:煞尾
- 2021-01-23 14:00
jquery异步上传,一般来说这里上传调用的是系统专门上传的action,上传好后返回上传文件信息。你这里result.files就是返回的上传结果。这个需要你在后台自己封装。你前端需要什么,后台就封装什么。
比如我以前写过一个
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
map fileobject = new hashmap();
fileinfo.put("size", size);//原始文件大小
fileobject.put("original", original);//原始文件唯一标识
fileobject.put("originalpath", originalpath);//原始文件临时存储目录
fileobject.put("thumb", thumb);//图片的预览文件唯一标识
fileobject.put("thumbpath", thumbpath);//图片预览文件临时存储目录
fileobject.put("name", filefilename);//原始图片名称
fileobject.put("url", url);//原始图片的web查看地址,这个可以设置img.src属性
fileobject.put("thumbnailurl", thumbnailurl);//预览图片的web查看地址
fileobject.put("contenttype", filecontenttype);//上传文件type
fileobject.put("deletetype", "post");//这是我自己封装的post删除
//这个是我自己封装的删除路径
fileobject.put("deleteurl", super.getrequest().getcontextpath() + "/removeupload.do?id=" + original);
map[] filearray = new hashmap[1];
filearray[0] = fileobject;
jsonobject jsonobject = new jsonobject();
jsonobject.put("files", jsonarray.fromobject(filearray));
httpservletresponse response = getresponse();
response.setcontenttype("application/json;charset=utf-8");
response.getwriter().write(jsonobject.tostring());
response.getwriter().flush();
而前断可以将上传文件的唯一标识放到一个隐藏域里,表单提交的时候一起提发送到后台,再根据唯一标识去取上传文件信息或写或复制转移。
前断fileuploaddone我是这么用的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
on('fileuploaddone', function(e , data){
//上传结果
$.each(data.result.files, function(index , file){
if (file.url) {
var link = $('').attr('target', '_blank').prop('href', file.url);
//这个是文件上传后的展示区域,可以在fileuploadadd事件里构建
var $imgdiv = $(data.context.children()[index]);
var $link = $imgdiv.find("canvas").wrap(link);
$imgdiv.append($('').prop('value', file.original));
$imgdiv.append($('').prop('value', file.name));
} else if (file.error) {
var error = $('').text(file.error);
$(data.context.children()[index]).append(error);
}
});
})
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯