`

附件上传下载总结

 
阅读更多
1.数据库炫耀两张表,SYS_ATTACHMENT(存放附件内容)和SYS_ATTACHMENTBUSINESSRELATION(存放附件和业务内容相关)。定义如下:

create table SYS_ATTACHMENT
(
  eventid         VARCHAR2(50),
  filename        VARCHAR2(50),
  filetype        VARCHAR2(50),
  filesize        NUMBER(12),
  content         BLOB,
  filedescription VARCHAR2(200),
  fileurl         VARCHAR2(500),
  createby        VARCHAR2(50),
  createddate     DATE,
  lastmodifyby    VARCHAR2(50),
  lastmodifydate  DATE,
  status          NUMBER(4)
)


create table SYS_ATTACHMENTBUSINESSRELATION
(
  attachmentid      VARCHAR2(50),
  businessdateid    VARCHAR2(50),
  businessdatetable VARCHAR2(50)
)


2.附件下载,附件内容存在Blob字段内。

主要方法:

  /**
	 * 
	 *@User   :Test
	 *@date   :2014-6-4 上午10:18:55
	 *@return :void
	 *@userFor :用于附件下载
	 */
	public void downloadAttachement(HttpServletRequest request, HttpServletResponse response)
	{
		//得到业务id
		String eventid = request.getParameter("eventid");
		Attachment attachmentEntity = xxService.getAttachement(eventid);
		//获得附件内容Blob
		Blob blob = attachmentEntity.getcontent();
		try
		{
			InputStream inputstream = null;
			byte filedata[] = null ;
			if (blob != null)
			{
				inputstream = blob.getBinaryStream();
				//获得字节数组
				filedata = new byte[inputstream.available()];
			}
			String fileNameMid = "";
			//处理中文乱码问题
			fileNameMid = URLEncoder.encode(attachmentEntity.getfilename(), "utf-8");
			//把+号转空格  %20是空格意思
			fileNameMid = fileNameMid.replace("+", "%20");
			//用于页面跳出下载提示
			response.setHeader("Content-Disposition", (new StringBuilder("attachment;filename=")).append(fileNameMid).toString());
			OutputStream outS = response.getOutputStream();
                        //下载到本地
			outS.write(filedata);
			
			inputstream.close();
			response.getOutputStream().flush();
			response.getOutputStream().close();
		}
		catch (Exception e)
		{
			e.printStackTrace();
		}
	}


3.附件上传
采用的附件上传插件是ServletFileUpload,jar包是commons-fileupload-1.2.2.jar
Spring MVC对应的Controller方法是

public Map<String, Object> saveWaterSoil(MultipartHttpServletRequest request, xx entity)


 /**
	 * 
	 *@User   :Test
	 *@date   :2014-6-4 上午11:15:59
	 *@return :List<AttachmentBo>
	 *@userFor :从MultipartHttpServletRequest中获得附件集合
	 */
    public List<AttachmentBo> getAttachmentBoList(MultipartHttpServletRequest request)
    {
    	
    	 List<AttachmentBo> attachmentBoList = new ArrayList<AttachmentBo>();
    	 /**
 		 * 为该请求创建一个DiskFileItemFactory对象,
 		 * 通过它来解析请求。执行解析后,所有的表单项目都
 		 * 保存在一个List中。
 		 */
         DiskFileItemFactory factory = new DiskFileItemFactory();
         //设置缓冲区
         factory.setSizeThreshold(102400000);
         ServletFileUpload upload = new ServletFileUpload(factory);
         //设置附件上传大小
         upload.setSizeMax(102400000);
         upload.setHeaderEncoding("UTF-8");
         HttpSession session = request.getSession();
         String username = (String) session.getAttribute("user");
         if (!upload.isMultipartContent(request))
         {
             return null;
         }
         try
         {
        	 Map<String, MultipartFile> multipartFileMap=request.getFileMap();
        	 Set<String> keySet=multipartFileMap.keySet();
        	 for (String key : keySet) {
        		 AttachmentBo m_AttachmentBo = new AttachmentBo();
        		 MultipartFile multipartFile=multipartFileMap.get(key);
        		 String fileName=multipartFile.getOriginalFilename();
        		 m_AttachmentBo.setfilesize(Integer.parseInt(multipartFile.getSize() + ""));
        		 //获得附件内容
                 m_AttachmentBo.setcontent(Hibernate.createBlob(multipartFile.getBytes()));
                 m_AttachmentBo.setcreateby(username);
                 m_AttachmentBo.setlastmodifyby(username);
                 m_AttachmentBo.setfilename(fileName);
                 m_AttachmentBo.setfilesize(Integer.parseInt(((Long)multipartFile.getSize()).toString()));
                 String desc=request.getParameter(key.concat("desc"));
                 m_AttachmentBo.setfiledescription(desc);
                 attachmentBoList.add(m_AttachmentBo);
			}
        	 return attachmentBoList;
         }
         catch (Exception e)
         {
        	 e.printStackTrace();
             return null;
         }
    }



分享到:
评论

相关推荐

    layui多附件上传.rar

    总结来说,"layui多附件上传.rar"是一个包含完整功能的多文件上传解决方案,它利用layui的upload模块实现了前端交互,并且提供了完善的后台操作。对于需要在项目中集成多文件上传功能的开发者,这是一个值得参考和...

    附件上传和下载的内容

    根据提供的文件信息,我们可以深入探讨有关“附件上传和下载”的技术细节,特别是涉及到前端与Java后端的交互过程。下面将详细介绍几个关键知识点: ### 一、MiniUI 附件上传 **MiniUI** 是一个轻量级的JavaScript...

    java附件上传与下载

    总结,Java实现附件上传与下载涉及了Web编程的基础知识,包括HTTP协议、Servlet、文件I/O操作以及可能的第三方库。通过学习这些技术,开发者能够构建出功能完善的文件管理系统,满足用户在Web应用中上传、下载文件的...

    多附件上传与下载

    总结来说,这段代码实现了一个基本的多附件上传功能,包括文件的保存、文件信息的记录以及与数据库的交互。它使用了Servlet API和Apache Commons FileUpload库来处理HTTP多部分请求,确保文件安全有效地上传到服务器...

    大附件上传代码

    总结来说,大附件上传是一个涉及多方面技术的复杂问题,包括文件分块、断点续传、并发控制、安全性、资源管理等。通过提供的代码和资源,开发者可以学习到如何在实际项目中实现这一功能,从而提升应用的用户体验和...

    多附件上传 代码

    ### 多附件上传技术解析与实现 #### 一、引言 在当今信息化时代,文件上传功能已经成为各类应用系统中的基本需求之一。特别是在企业级应用中,用户往往需要上传多个文件进行业务处理,这就对系统的文件上传功能提出...

    SWFUpload多附件上传控件DEMO

    总结来说,SWFUpload是一个功能齐全、用户体验良好的多附件上传控件,具有多文件选择、进度条显示和高度自定义的特点。它不仅简化了用户上传文件的过程,同时也为开发者提供了丰富的配置选项和易于扩展的架构,是...

    关于附件上传文件名包含特殊字符的问题解决办法

    ### 关于附件上传文件名包含特殊字符的问题解决办法 #### 背景介绍 在互联网应用开发中,经常需要处理用户上传的附件。这些附件可能包括文档、图片、视频等多种类型。然而,在实际操作过程中,可能会遇到一个常见...

    多附件上传demo.zip

    总结来说,这个多附件上传的Demo涵盖了前端HTML/JS、后端Struts2 Action、服务器环境配置以及数据模型等多个方面,是开发者学习和实践多文件上传功能的一个完整示例。通过这个案例,开发者可以了解整个文件上传流程...

    12、Webdynpro入门之常用控件4(上传下载附件)

    ### Webdynpro中上传下载附件控件的使用方法 #### 一、概述 在Webdynpro应用程序中,处理文件上传和下载是非常常见的需求之一。本文档详细介绍了如何使用`FileUpload`和`FileDownload`控件来实现这些功能。通过...

    IIS7下如何设置IIS对上传附件大小的限制总结版

    ### IIS7 下设置上传附件大小限制的正确方法 #### 背景介绍 IIS (Internet Information Services) 是微软提供的互联网服务套件之一,它主要用于托管网站、Web 应用和服务。IIS7(IIS 7.0)作为 Windows Server 2008...

    Domino平台多附件上传的设计与实现

    总结来说,实现Domino平台的多附件上传涉及以下几个关键步骤: 1. 设计包含多个文件域的表单,或者创建允许动态添加附件的界面。 2. 使用JavaScript进行前端验证,包括文件类型和大小检查。 3. 利用LotusScript或...

    ASP.NET多附件上传和附件编辑的实现

    总结来说,实现ASP.NET多附件上传和附件编辑涉及前端交互、服务器处理、文件存储、用户权限以及安全性等多个方面。在设计和实现过程中,应兼顾功能需求、用户体验和系统安全,确保系统的稳定性和可扩展性。

    泛微E9获取附件内容,泛微Ecology9获取附件范例,Ecology9附件、E9附件下载,并发送邮件到邮箱JAVA.zip

    在这个场景中,我们需要关注的是如何从泛微E9系统中获取附件内容,然后将这些附件下载并发送到指定的邮箱。由于标签中提到了"C#",我们可以推断这个示例是用C#编程语言实现的。 首先,我们要理解泛微E9和Ecology9...

    asp.net多附件上传实例代码

    总结来说,ASP.NET多附件上传实例代码涉及了从HTML表单设计、服务器控件使用到服务器端处理、客户端交互、错误处理和安全控制等多个方面。理解并掌握这些知识点对于开发高效、安全的文件上传功能至关重要。

    java实现附件的上传与下载

    在Java编程中,实现附件的上传与下载是Web应用程序中常见的功能,特别是在处理用户交互、数据交换和文件管理的应用场景下。以下将详细介绍如何利用Java技术来实现这一目标。 一、上传附件 1. **HTTP协议理解**:...

    dz千脑附件上传插件

    总结起来,"dz千脑附件上传插件"是针对Discuz! 论坛的附件上传解决方案,它通过增强的上传功能和友好的用户界面,改善了论坛用户上传和管理附件的体验。配合`editor_menu_forum.htm`、`更多免费插件.htm` 和 `readme...

    ExtJs4 多附件上传组件

    总结来说,ExtJS4实现多附件上传组件涉及的关键技术点有文件选择、事件处理、Ajax上传、进度反馈、错误处理以及自定义组件的封装。通过理解这些知识点,你不仅可以构建一个功能完备的上传功能,还能提升对ExtJS组件...

    asp.net mvc+easyui附件上传

    在本教程中,我们将探讨如何使用ASP.NET MVC和EasyUI实现附件上传功能。 首先,我们需要在视图(View)中创建一个HTML表单,使用EasyUI的`&lt;form&gt;`和`&lt;input type="file"&gt;`元素来让用户选择要上传的文件。例如: ```...

    关于修改Roundcube Webmail上传附件的大小

    ### 关于修改Roundcube Webmail上传附件的大小 在日常工作中,我们经常需要通过电子邮件发送文件,有时这些文件的大小超过了默认的限制,这就会导致发送失败或出现其他错误。对于使用Roundcube Webmail系统的用户而...

Global site tag (gtag.js) - Google Analytics