文件下载

效果图:


html页面:在<td>里放一个id,页面默认加载的时候,加载那多个已经上传的附件

<span style="white-space:pre">	<pre name="code" class="html"><tr>
						<td><label>附件:</label></td>
						<td id="pu_files">
						
						</td>
					</tr>


数据库里的不同的附近是以逗号隔开

页面默认加载的js:

$(function () {	
		
		$("#enable").combobox("select",'${practiceUnit.isDeleted}');	
		//加载行业信息		
		loadIndustry();
		//加载城市信息
		loadCity();
		//处理福利
		var v_array=new Array();
		var value='${practiceUnit.benefits}';
		
		if(value!=null&&value!=undefined&&value!=""){
			v_array=value.split(",");
		}
		
		
		for(var i=0;i<v_array.length;i++){			
			$("#benefit_"+parseInt(v_array[i])).prop("checked",true);
		}
		
		//处理附件
		//处理附件的显示			
		var fujian="";		
		var fj_array=new Array();
		var fj_value='${practiceUnit.attachment}';
		if(fj_value!=null&&fj_value!=undefined){
			fj_array=fj_value.split(",");
		}
		if(fj_array.length>0){
			
			
			for(var i=0;i<(fj_array.length-1);i++){
				
				var arr = fj_array[i].split('/');
				var abc = arr[arr.length -1];
				fujian +='<h6>';
				fujian +="<a href='<%= request.getContextPath() %>/manage/practiceUnit/"+abc+"/download'>"+abc+"</a>  ";
				fujian +="<a href='#' onclick='deleteAttach(this,\""+abc+"\","+'${practiceUnit.id}'+")'>删除</a><br/>";	
				fujian +='</h6>';	
			}
					
		}
		fujian +='<input type="button" value="添加附件" onclick="addFile()"/>';
		
		$("#pu_files").html(fujian);
	
	     
	});
	
	//添加文件
    function addFile(){
		
    	var strFile="<h6><input name=\"myfiles\" type='file'  style='WIDTH:350px;'/>";
    	 var deleButton="<input  type='button'  value='删除' onclick=\"deleteFile(this)\"/><br/></h6>";
    	 document.getElementById("pu_files").insertAdjacentHTML("beforeEnd",strFile+deleButton);
    }  
   
	//移除添加的文件
     function deleteFile(o) {
		
       while (o.tagName != "H6"){  o = o.parentNode;}
       o.parentNode.removeChild(o);
     }
   //删除附件
 	function deleteAttach(o,fileName,rowId){
 		
 		$.post('<%= request.getContextPath() %>/manage/practiceUnit/'+fileName+'/deleteAttach/'+rowId, function(result) {
 				
 			if (result.info){
 				$.messager.show({
 					title: 'Success',
 					msg: result.info
 				});
 				//删除页面元素
 				deleteFile(o); 				
 			} else {
 				$.messager.show({
 					title: 'Error',
 					msg: result.error
 				});
 			}
 			
 			//reloadTree();
 		}, 'json');
 		
 	}
	

附件的下载,就是在文件名外嵌套a标签

后台的代码

/**
	 * 下载单个文件
	 * 
	 * @param fileName
	 * @param request
	 * @param response
	 * @return
	 * @throws IOException
	 */
	@RequestMapping(value = "/{fileName}/download")
	public String download(@PathVariable("fileName") String fileName, HttpServletRequest request,
			HttpServletResponse response) throws IOException {
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("UTF-8");
		java.io.BufferedInputStream bis = null;
		java.io.BufferedOutputStream bos = null;

		String realPath = request.getSession().getServletContext().getRealPath("/upload/files/");
		// String ctxPath =
		// request.getSession().getServletContext().getRealPath("/")+ "\\" +
		// "images\\";

		String downLoadPath = realPath + fileName;
		try {
			long fileLength = new File(downLoadPath).length();
			response.setContentType("application/x-msdownload;");
			response.setHeader("Content-disposition",
					"attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
			response.setHeader("Content-Length", String.valueOf(fileLength));
			bis = new BufferedInputStream(new FileInputStream(downLoadPath));
			bos = new BufferedOutputStream(response.getOutputStream());
			byte[] buff = new byte[2048];
			int bytesRead;
			while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
				bos.write(buff, 0, bytesRead);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			if (bis != null)
				bis.close();
			if (bos != null)
				bos.close();
		}
		return null;

	}

	/**
	 * 删除附件
	 * 
	 * @param fileName
	 * @param id
	 * @return
	 */
	@RequestMapping(value = "/{fileName}/deleteAttach/{id}")
	public String deleteAttach(Model model, @PathVariable("fileName") String fileName, @PathVariable("id") Long id) {
		try {
			PracticeUnit practiceUnit = practiceUnitService.getById(id);
			String attachment = practiceUnit.getAttachment();
			fileName = fileName.trim();
			String ls = attachment.replaceAll("/upload/files/" + fileName + ",", "");
			practiceUnit.setAttachment(ls);
			practiceUnitService.update(practiceUnit);
			model.addAttribute("info", "删除文件成功!");
		} catch (Exception e) {
			logger.error("删除文件失败!", e);
			model.addAttribute("error", "删除文件失败!");
		}
		return JSON;
	}


说明:

1.download 方法,fileName放在中间,是因为 比如1.png,传不过来,放在中间就能传过来了

2.deleteAttach方法,只是替换了一下文件名,将文件名置换为空字符串,之前说过,以前是按照逗号隔离开的。




源码地址: https://pan.quark.cn/s/a4b39357ea24 欧姆龙触摸屏编程软件MPTST 5.02是专门为欧姆龙品牌的工业触摸屏而研发的编程解决方案,它赋予用户在直观界面上构建、修改以及排错触摸屏应用程序的能力。 该软件在工业自动化领域具有不可替代的地位,特别是在生产线监视、设备操控以及人机互动系统中发挥着核心作用。 欧姆龙MPTST(Machine Process Terminal Software Touch)5.02版本配备了多样化的功能,旨在应对不同种类的触摸屏项目要求。 以下列举了若干核心特性:1. **图形化编程**:MPTST 5.02采用图形化的编程模式,允许用户借助拖拽动作来设计屏幕布局,设定按钮、滑块、指示灯等组件,显著简化了编程流程,并提升了工作效率。 2. **兼容性**:该软件能够适配欧姆龙的多个触摸屏产品线,包括CX-One、NS系列、NJ/NX系列等,使用户可以在同一个平台上完成对不同硬件的编程任务。 3. **数据通信**:MPTST 5.02具备与PLC(可编程逻辑控制器)进行数据交互的能力,通过将触摸屏作为操作界面,实现生产数据的显示与输入,以及设备状态的监控。 4. **报警与事件管理**:软件中集成了报警和事件管理机制,可以设定多种报警标准,一旦达到预设条件,触摸屏便会展示对应的报警提示,助力操作人员迅速做出响应。 5. **模拟测试**:在设备实际连接之前,MPTST 5.02支持用户进行脱机模拟测试,以此验证程序的正确性与稳定性。 6. **项目备份与恢复**:为了防止数据遗失,MPTST 5.02提供了项目文件的备份及还原功能,对于多版本控制与团队协作具有显著价值。 7. **多语言支持**:针对全球化的应...
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值