`

显示上传的文件,图片则显示,附件则提供下载

 
阅读更多
package cn.com.leadfar.cms.backend.view;

import java.io.File;
import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;

import cn.com.leadfar.cms.backend.model.Attachment;

public class AttachmentFilter implements Filter {

	@Override
	public void destroy() {
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		//判断请求的URI,是否包含"upload_image"
		//如果包含"upload_image",则从d:/temp/upload目录中读取相应的文件,并且把文件的数据流写入response
		HttpServletRequest req = (HttpServletRequest)request;
		HttpServletResponse resp = (HttpServletResponse)response;
		
		String requestURI = req.getRequestURI();
		
		//因为路径中可能包含有经过编码的信息,所以需要将它转换为正确的字符串
		requestURI = URLDecoder.decode(requestURI, request.getCharacterEncoding());
		
		//indexOf返回值:
		//-1表示不包含这个字符串
		//某个值,就表示这个字符串起始字符的索引
		//requestURI的值,可能是:/cms/backend/upload_image/logo.gif
		int index = requestURI.indexOf("/upload_image/");
		if(index != -1){ 
			String imageName = requestURI.substring(index+"/upload_image/".length());
			byte[] image = FileUtils.readFileToByteArray(new File(Attachment.ATTACHMENT_DIR+imageName));
			response.setContentType("image/jpeg");
			response.getOutputStream().write(image);
			return;
		}
		
		index = requestURI.indexOf("/upload_file/");
		if(index != -1){
			String fileName = requestURI.substring(index+"/upload_file/".length());
			byte[] file = FileUtils.readFileToByteArray(new File(Attachment.ATTACHMENT_DIR+fileName));
			response.setContentType("application/x-msdownload");
			response.getOutputStream().write(file);
			return;
		}
		
		//让其他的请求通行!
		chain.doFilter(request, response);
	}

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
	}

}

 

分享到:
评论

相关推荐

    根据附件的后缀名来显示相应的图标

    标题“根据附件的后缀名来显示相应的图标”涉及到的是计算机操作系统中的一种常见功能,即根据文件的扩展名(后缀名)来显示相应的图标。这个功能在Windows、macOS等操作系统中尤为常见,它有助于用户快速识别不同...

    文件图片预览上传下载

    在IT行业中,文件图片预览、上传、下载和删除是常见的功能需求,广泛应用于各种Web应用和移动应用中。这些功能对于用户交互性和便捷性至关重要。以下是对这些知识点的详细说明: 1. **图片预览**: 图片预览是指在...

    php 20个实例文件简单上传下载源码

    - 可以通过设置`Content-Type`和`Content-Disposition`头来指定文件类型和显示方式(直接显示还是作为附件下载)。 3. **错误处理**: - PHP提供了一系列错误代码,如`UPLOAD_ERR_OK`、`UPLOAD_ERR_INI_SIZE`等,...

    附件上传下载demo.zip

    在Web应用中,用户可能需要上传图片、文档或其他类型的文件。这通常通过HTML表单实现,表单中包含`<input type="file">`元素,允许用户选择本地文件。在后台,服务器端代码接收到文件数据并将其存储到服务器的某个...

    PHP文件上传和下载

    在PHP中,文件上传和下载是两个非常重要的功能,它们在Web开发中有着广泛的应用,例如用户上传头像、分享文件或下载资源等。本文将详细介绍如何使用PHP实现这两个功能。 首先,我们从文件上传开始。PHP提供了`$_...

    文件(图片、附件)上传cgh124

    在IT行业中,文件上传是网页应用和服务端交互的一个基本功能,尤其在处理图片和附件时更为常见。"文件(图片、附件)上传cgh124"这一标题和描述可能是指一个具体的功能模块或者示例,它涉及到用户将图片、附件等数据...

    .net百度编辑器(UEditor)上传图片跟上次附件不成功的解决办法

    .NET百度编辑器(UEditor)上传图片跟上次附件不成功的解决办法需要配置文件的正确设置、附件上传的参数设置、文件大小限制的设置等。通过正确的配置和设置,能够成功地上传图片和附件,提高工作效率和用户体验。 ...

    .net图片上传下载显示

    - 与下载不同,响应头的`Content-Type`应设置为对应的图片MIME类型,如`image/jpeg`或`image/gif`,而不需要`Content-Disposition`,这样浏览器会直接显示图片,而不是作为附件下载。 - ASP.NET中可以使用`<img>`...

    文件上传下载+预览功能

    文件下载则相反,是从服务器获取文件并保存到本地的过程。可以通过设置HTTP响应头中的`Content-Disposition`字段,指示浏览器以下载方式处理响应。同时,需要关注文件的MIME类型,确保浏览器正确解析文件内容。 ...

    动态添加附件-上传文件

    在IT领域,动态添加附件和上传文件是常见的功能需求,特别是在Web应用中。这个功能允许用户在界面上根据需要自由地增加附件,并一次性上传多个文件。以下是对这一主题的详细阐述: 1. **动态添加附件**: 这个过程...

    uEditor上传图片并保存为原文件名

    【标题】"uEditor上传图片并保存为原文件名"涉及的是在ASP.NET环境中使用uEditor编辑器进行图片上传,并确保图片文件以上传时的原始文件名存储的过程。uEditor是一个流行的富文本编辑器,广泛应用于网站内容管理系统...

    struts2文件上传下载

    这些功能在Web应用中非常实用,可以用于上传用户资料、产品图片、报表文件等,以及提供各种文件的下载服务。开发者应当注意这些操作的安全性和性能影响,避免潜在的安全风险,并确保应用能够处理大规模的文件上传...

    多图片上传和取消上传(基于框架)

    多图片上传的核心在于`<input type="file">`元素的`multiple`属性,它允许用户在选择文件时选择多个。例如: ```html ``` 当用户选择文件后,可以通过JavaScript获取到选中的文件列表,如下所示: ```javascript...

    c# ,js请高手帮忙在附件源码里添加上传进度显示

    标题 "c# ,js请高手帮忙在附件源码里添加上传进度显示" 暗示我们需要探讨的是如何在C#后端与JavaScript前端之间实现文件上传时的进度显示功能。这个功能常见于Web应用中,它能提升用户体验,让用户了解文件上传的...

    .net文件上传下载功能实现demo

    - 视图(View):呈现用户界面,可以与控制器交互,显示上传/下载的UI。 - 模型(Model):封装业务数据和逻辑,通常包含上传/下载的文件信息。 5. **C#编程**: - 类和对象:用面向对象的方式组织代码,如创建`...

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

    然而,在实际操作过程中,可能会遇到一个常见问题:当用户上传的文件名中包含了特殊字符时,系统在下载这些附件时会出现错误或者无法正常下载的情况。本文将详细介绍如何解决这个问题,并提供两种不同的解决方案。 ...

    kindeditor4.0.NET集成版(含图片和附件上传)

    kindeditor4.0.NET集成版(含图片和附件上传), 删除多余其他语言文档,修改js和ashx文件,上传文件按日期分文件夹存放。 kindeditor是一款较轻量级的国产富文本编辑器,包括300多K的表情包,和各类图片,总共只有...

    jsp 上传附件,类似163添加附件界面,有上传进度显示

    同时,为了模仿163邮箱的界面,我们可以设计一个美观的提交按钮以及用于显示上传进度的进度条。 2. **AJAX异步上传**:为了提供上传进度显示,我们通常不直接提交表单,而是采用AJAX(Asynchronous JavaScript and ...

    java文件上传和下载功能

    文件下载则相对简单。一旦文件在服务器上存储,我们可以创建一个HTTP响应,设置合适的响应头,如`Content-Type`表示文件类型,`Content-Disposition`指示浏览器如何处理响应(例如,作为附件进行下载)。然后,通过`...

    ASP文件与图片上传与下载

    ASP文件与图片上传与下载是Web开发中的常见需求,尤其在构建交互性强的网站时,用户可能需要上传个人照片、产品图片或者文档等。在ASP.NET框架中,使用C#语言可以实现高效且安全的文件上传和下载功能。本文将详细...

Global site tag (gtag.js) - Google Analytics