简单的Ext文件上传,文件下载和文件删除
来源:互联网 发布:国语版港剧软件 编辑:程序博客网 时间:2024/05/22 06:59
最近有用Ext和后台的servlet完成了一套简单的文件管理功能,写了几天,不得不说,没有精通某个框架有时候还是比较坑的,所以写了3,4天。记录在这里方便自己以后复习也可以帮助有些和我一样需求的人绕坑。既然是简单所以就美誉文件上传时的文件类型判断,大小限制,等等,需要的可以自己加。开始吧:
1.上传模块
1.1前台部分
前台是用Ext写了一个弹出的表单,表单中的有一项,就是Ext的文件选择框,这个地方有个坑,大家绕一下。具体看我这篇博客:
http://blog.csdn.net/haloby/article/details/77979665
正确的写法(只贴出表单部分):
一定要加 fileUpload: true,
var addForm = new Ext.form.FormPanel({id:'addform',width:400,bodyStyle:'margin:5px 5px 5px 5px',frame:true,labelWidth:60,fileUpload: true,items:[{xtype:"field",id:"title",fieldLabel:'题目',alowBlank:false,},{xtype:"field",id:"opid",fieldLabel:'操作人',readOnly:"true",value:operator,alowBlank:false,},{xtype:"textarea",id:"content",fieldLabel:'内容',},{xtype:"textarea",id:"explain",fieldLabel:'说明',},{xtype:'filefield',fieldLabel:'附件添加',id:'uploadinput',blankText:'请上传文件',anchor:'90%'}]});submit提交表单:
{ text: '提交', handler: function() {var loadin = Ext.getCmp('uploadinput').getValue();if(loadin!=""&&loadin!=null){Ext.Msg.show({ modal:false, title:"请稍等...", msg:"正在提交信息...", closable:true, width:300, wait:true });var upform = addForm.getForm();if (upform.isValid()){ upform.submit({type:'ajax',url:contextPath+'/json/commonjson?actionId=uploadJybzAddOptdata',waitMsg: '正在提交数据...',success: function(){ Ext.Msg.alert('成功','上传成功.'); },failure: function(){ Ext.Msg.alert('失败', '上传失败.'); } });}}这样 就可以把表单交给servlet去处理了
1.2后台部分
//得到上传文件的保存目录,将上传的文件存放于WEB-INF目录下,不允许外界直接访问,保证上传文件的安全String savePath = "/upload";File file = new File(savePath);//判断上传文件的保存目录是否存在if (!file.exists() && !file.isDirectory()) {//创建目录file.mkdir();}try {//1、创建一个DiskFileItemFactory工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); //2、创建一个文件上传解析器 ServletFileUpload upload = new ServletFileUpload(factory); //解决上传文件名的中文乱码 upload.setHeaderEncoding("UTF-8"); //3、判断提交上来的数据是否是上传表单的数据 if(!ServletFileUpload.isMultipartContent(req)){ return; } //4、使用ServletFileUpload解析器解析上传数据 List<FileItem> list = upload.parseRequest(req); Map itemMap = new HashMap(); for(FileItem item : list){ //如果fileitem中封装的是普通输入项的数据 if(item.isFormField()){ String name = item.getFieldName(); //解决普通输入项的数据的中文乱码问题 String value = item.getString("UTF-8"); //value = new String(value.getBytes("iso8859-1"),"UTF-8"); itemMap.put(name, value); log.debug(name + "=" + value); }else{//如果fileitem中封装的是上传文件 //得到上传的文件名称, String filename = item.getName(); String title = (String) itemMap.get("title-inputEl"); String opid = (String) itemMap.get("opid-inputEl"); String content = (String) itemMap.get("content-inputEl"); String explain = (String) itemMap.get("explain-inputEl"); log.debug(title+"+"+opid+"+"+content+"+"+explain+"+"+filename); int a = (int) ((Math.random()*(9999-1000+1))+1000); String id = Long.toString(System.currentTimeMillis())+Integer.toString(a); sv.uploadJybzAddOptdata(title,opid,content,explain,filename,id); if(filename==null || filename.trim().equals("")){ continue; } //处理获取到的上传文件的文件名的路径部分,只保留文件名部分 filename = id+filename.substring(filename.lastIndexOf("\\")+1); //获取item中的上传文件的输入流 InputStream in = item.getInputStream(); //创建一个文件输出流 FileOutputStream out = new FileOutputStream(savePath + "\\" + filename); //创建一个缓冲区 byte buffer[] = new byte[1024]; //判断输入流中的数据是否已经读完的标识 int len = 0; //循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据 while((len=in.read(buffer))>0){ //使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\" + filename)当中 out.write(buffer, 0, len); } //关闭输入流 in.close(); //关闭输出流 out.close(); //删除处理文件上传时生成的临时文件 item.delete(); } }} catch (Exception e) {log.error(e.getMessage(),e);}
2.下载模块
2.1前台
监听了一个双击时间,因为我是直接存在项目目录下,所以可以这样写:
window.location.href=contextPath+"/json/commonjson?actionId=downloadJybzAllOptdata&filename="+filename;
listeners: {itemdblclick: function(dataview, record, item, index, e) { serverInfo=this.getStore().getAt(index); var fid = serverInfo.data["id"]; var fappendix = serverInfo.data["appendix"]; var filename = fid + fappendix; window.location.href=contextPath+"/json/commonjson?actionId=downloadJybzAllOptdata&filename="+filename; }},
2.2后台
try {// 取得文件名。 String filename = req.getParameter("filename"); // path是指欲下载的文件的路径。String path = "/upload/"; File file = new File(path+filename); // 取得文件的后缀名。 String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); // 以流的形式下载文件。 InputStream fis = new BufferedInputStream(new FileInputStream(path+filename)); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response resp.reset(); // 设置response的Header resp.addHeader("Content-Length", "" + file.length()); OutputStream toClient = new BufferedOutputStream(resp.getOutputStream()); resp.setContentType("application/octet-stream");
//通知浏览器打开一个下载窗口 resp.setHeader("Content-Disposition", "attachment;filename=" + filename); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (Exception e) { log.error(e.getMessage(),e); }
3.删除部分
3.1前台
前台是一个ajax请求,交给需要处理的servlet。
3.2后台
我用Strring拼了一下文件名,直接给文件名的请直接忽略。
try {String dataInfo = req.getParameter("dataInfo");String appendixs = req.getParameter("appendixs");sv.getJybzDeleteOptdata(dataInfo);String[] ids = dataInfo.split(",");String[] str = appendixs.split(","); for(int i=0;i<=str.length-1;i++){ String filename = ids[i]+str[i]; File file=new File("/upload/"+filename); if(file.exists()&&file.isFile()) file.delete(); }} catch (Exception e) {log.error(e.getMessage(),e);}
阅读全文
0 0
- 简单的Ext文件上传,文件下载和文件删除
- struts2的文件上传和文件下载
- 文件上传和文件下载
- python ftp 文件上传和文件下载
- Struts2中的文件上传和文件下载
- NSURLSession实现文件下载和文件上传
- struts2文件下载和文件上传
- springmvc文件上传和文件下载
- 文件上传和文件压缩下载
- 文件上传allowedTypes和文件下载contentType(mimeType)
- 文件上传allowedTypes和文件下载contentType(mimeType)
- 利用Socket 实现 FTP 文件上传和文件下载
- 文件上传allowedTypes和文件下载contentType(mimeType)
- linux 通过crt直接上传和下载文件和文件
- 异步的多文件上传和文件存储代码
- SpringMVC文件上传和文件过大处理
- #.java上传文件和文件信息
- HTML5 多文件上传和文件操作
- JTAG和SWD
- Java对多路复用I/O技术的支持
- Path.Combine 合并路径
- django开发环境部署四(四)
- intellij引入jar包怎么加载jar包的源代码
- 简单的Ext文件上传,文件下载和文件删除
- ConnectivityManager类 判断网络是否可用进行设置
- tesseract4.0alpha、leptonica-1.74.4编译和安装
- 关于前端的一些禁止操作
- tabview中有输入框监听键盘事件
- sql语句中where 1=1 的用法
- vive手柄按键获取
- 计算图片中的物体的实际尺寸的一种方法
- LCD显示移植(LVDS接口)