`
isiqi
  • 浏览: 16495184 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

路劲方法访问图片或文件的java代码

阅读更多

package com.hss.custonline.web.controller;

import java.awt.Container;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.RenderingHints;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.Properties;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.io.support.PropertiesLoaderUtils;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

import com.sun.image.codec.jpeg.ImageFormatException;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGEncodeParam;
import com.sun.image.codec.jpeg.JPEGImageEncoder;

/**
* 参数:
* path 路径类型
* file 文件名
* thumbnail {true} 如果有则输出缩略图
* @author iinmming
*
*/
public class ShowFile implements Controller {

public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
throws Exception {

boolean imageType = false;
boolean isThumbnail = false;
String thumbnail = request.getParameter("thumbnail");
if (thumbnail != null && thumbnail.equals("true")) {
isThumbnail = true;
}

Properties props = PropertiesLoaderUtils.loadAllProperties("upload.properties");

String path = request.getParameter("path");

path = path == null ? "uploadpath" : path;
String sysPath = props.getProperty(path);
ServletOutputStream out = response.getOutputStream();
String file1 = request.getParameter("file").equals("")|| request.getParameter("file").equals("null") ? "nopic.jpg" : request.getParameter("file");

System.out.println("!!file1: " + file1);


String filename = sysPath + file1; // 要打开的文件物理真实路径


int dot = filename.indexOf(".");
String fileType = filename.substring(dot + 1); // 后缀
int realFileDot = filename.lastIndexOf("/");
String fileRealName = filename.substring(realFileDot + 1); // 真正的文件名


// ---------------------------------------------------------------
// 设置MIME
// ---------------------------------------------------------------
if (fileType.equalsIgnoreCase("xls")) {
response.setContentType("application/vnd.ms-excel");
} else if (fileType.equalsIgnoreCase("doc")) {
response.setContentType("application/msword");
}

else if (fileType.equalsIgnoreCase("ppt")) {
response.setContentType("application/vnd.ms-powerpoint");
}

else if (fileType.equalsIgnoreCase("pdf")) {
response.setContentType("application/pdf");
} else if (fileType.equalsIgnoreCase("gif")) {
response.setContentType("image/gif");
imageType = true;
} else if (fileType.equalsIgnoreCase("jpg") || fileType.equalsIgnoreCase("jpeg")) {
response.setContentType("image/jpeg");
imageType = true;
} else if (fileType.equalsIgnoreCase("png")) {
response.setContentType("image/png");
imageType = true;
} else if (fileType.equalsIgnoreCase("bmp")) {
response.setContentType("image/x-xbitmap");
imageType = true;
}

else if (fileType.equalsIgnoreCase("zip")) {
response.setContentType("application/zip");
}

// ---------------------------------------------------------------
// create an input stream from file
// ---------------------------------------------------------------

response.setHeader("Content-disposition", "attachment; filename=" + fileRealName); // 设置下载信息

// locate the real file path
String fileName = filename;

// ServletContext sc = getServletContext();
// filename = sc.getRealPath("image.gif");转化虚拟Web路径为服务器物理路径

// System.out.println("试图打开文件: " + filename);

BufferedInputStream bis = null;
BufferedOutputStream bos = null;
File file = null;
FileInputStream fileInputStream = null;
try {
// 如果是图片类型且要求输出缩微图的情况
if (imageType && isThumbnail) {

bos = generateThumbnail(out, fileName, bos);

}


file = new File(fileName);
fileInputStream = new FileInputStream(file);

bis = new BufferedInputStream(fileInputStream);

bos = new BufferedOutputStream(out);

byte[] buff = new byte[2048];
int bytesRead;

while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}

} catch (java.io.FileNotFoundException ne) {
throw ne;
} catch (final MalformedURLException e) {
System.out.println("MalformedURLException.");
throw e;
} catch (final IOException e) {
System.out.println("IOException.");
throw e;
} finally {
if (bis != null) {
bis.close();
}
if (bos != null) {
bos.close();
}
if (fileInputStream != null) {
fileInputStream.close();
}

}

return null;
}

private BufferedOutputStream generateThumbnail(OutputStream out, String fileName,
BufferedOutputStream bos) throws IOException, ImageFormatException,
NumberFormatException {
Image image = Toolkit.getDefaultToolkit().getImage(fileName);
MediaTracker mediaTracker = new MediaTracker(new Container());
mediaTracker.addImage(image, 0);
try {
mediaTracker.waitForID(0);
} catch (InterruptedException ex) {
}
// determine thumbnail size from WIDTH and HEIGHT
int thumbWidth = Integer.parseInt("200");
int thumbHeight = Integer.parseInt("160");
double thumbRatio = (double) thumbWidth / (double) thumbHeight;
int imageWidth = image.getWidth(null);
int imageHeight = image.getHeight(null);
double imageRatio = (double) imageWidth / (double) imageHeight;
if (thumbRatio < imageRatio) {
thumbHeight = (int) (thumbWidth / imageRatio);
} else {
thumbWidth = (int) (thumbHeight * imageRatio);
}
// draw original image to thumbnail image object and
// scale it to the new size on-the-fly
BufferedImage thumbImage = new BufferedImage(thumbWidth, thumbHeight,
BufferedImage.TYPE_INT_RGB);
Graphics2D graphics2D = thumbImage.createGraphics();
graphics2D.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
graphics2D.drawImage(image, 0, 0, thumbWidth, thumbHeight, null);
// save thumbnail image to OUTFILE
bos = new BufferedOutputStream(out);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(bos);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbImage);
int quality = Integer.parseInt("80");
quality = Math.max(0, Math.min(quality, 100));
param.setQuality((float) quality / 100.0f, false);
encoder.setJPEGEncodeParam(param);
encoder.encode(thumbImage);
out.close();
return bos;
}
}

分享到:
评论

相关推荐

    java文件路径获取

    - **Resource**: 在Java中通常指的是类路径下的文件,如配置文件、图片等非可执行代码的文件。 - **URL**: Uniform Resource Locator 的缩写,即统一资源定位符,是一种标识Internet资源位置的方式。 #### 三、主要...

    java导出CSV文件,EXCEL文件(不用指定下载路劲)

    在Java编程中,导出CSV(Comma Separated Values)和Excel...总之,Java提供了丰富的库来处理CSV和Excel文件,通过适当的方法,可以轻松地实现在服务器端生成文件并直接下载到客户端,而无需在服务器上保存临时文件。

    根据指定文件或者文件夹路劲压缩文件

    传入指定文件或者文件夹路劲数组进行压缩,支持混合的文件夹或者文件。速度快,不需要额外引入包

    路劲

    路劲

    文件路径选择

    4. 文件操作函数:在编程中,如Java、Python或C#等语言提供了处理文件路径的内置函数。例如,Python的os模块提供了os.path.abspath()来获取绝对路径,os.path.dirname()获取路径中的目录部分,os.path.basename()...

    ajax+jquery+flash进度条的文件图片上传完返回上传路劲完美例子

    本示例“ajax+jquery+flash进度条的文件图片上传完返回上传路劲完美例子”着重展示了如何结合AJAX、jQuery和Flash技术实现一个高效的文件上传功能,特别是针对图片文件,并且具有进度条显示以及解决乱码问题。...

    用于求最优路劲的蚂蚁或蚁群算法

    该代码使用C语言编写,包括了初始化参数、计算解决方案的质量、更新pheromone的值等步骤。该代码还包括了一些基本的数据结构,如数组、矩阵等,以便于存储和处理数据。 蚁群算法是一种强大的metaheuristics算法,...

    Java从网络读取图片并保存至本地实例

    在Java编程中,从网络上下载并保存图片到本地是一个常见的任务,特别是在处理网页抓取、数据爬虫或者网络资源管理等场景。本实例详细展示了如何使用Java来实现这一功能。下面将深入解析这段代码的工作原理和关键知识...

    java 获取项目文件路径实现方法

    在Java编程中,获取项目文件路径是常见的需求,特别是在处理资源文件、配置文件或进行文件操作时。这里我们将深入探讨几种不同的方法来实现这一目标,同时解析每种方法的适用场景和返回路径的特点。 1. `this....

    Java基础知识梳理

    + .java 文件:源文件,保存 JAVA 的源代码,文本文件。 + .class 文件:类文件,保存字节码,二进制文件。 * 使用 javac 命令,将 java 文件编译成 class 文件。格式:javac 文件名.java(不区分大小写) * 使用 ...

    stata 1.2 stata文件路劲02.mp4

    stata 1.2 stata文件路劲02.mp4

    Java如何实现上传文件到服务器指定目录

    Java实现上传文件到服务器指定目录的方法 Java是一种广泛应用于Web开发的编程语言,而上传文件到服务器指定目录是Java Web开发中的一项常见任务。本文将详细介绍如何使用Java实现上传文件到服务器指定目录,并提供...

    读取properties文件路径的两种方式.zip

    在Java开发中,读取`properties`文件是常见的任务,用于加载配置信息。`properties`文件通常包含了应用程序的设置,如数据库连接字符串、服务器端口等。本篇将详细讲解两种读取`properties`文件路径的方法,并通过一...

    c#保存文件(文本框保存到txt)

    在C#编程中,保存文件是一项基本操作,特别是在开发用户界面(UI)应用程序时,如Windows Forms或WPF,用户可能需要将输入的数据保存到本地文件。本篇将详细讲解如何将文本框(TextBox)中的内容保存到一个TXT文本...

    Unity打开(Windows,Mac)文件夹选择文件封装

    在Unity引擎中,进行桌面应用开发时,常常需要与操作系统进行交互,比如允许用户通过文件浏览器选择特定的文件或文件夹。"Unity打开(Windows,Mac)文件夹选择文件封装"这一主题,主要涉及如何在Unity中实现跨平台的...

    用java学画图,显示轨迹,实现双缓冲效果

    理解画图时,Graphics对象从哪里来的,画到什么地方去,如何实现画图时显示轨迹,代码简单,但搞懂简单的代码后,对其他的理解就非常方便,适合初学者.

    jar包所在文件夹

    在IT行业中,jar(Java Archive)包是一种广泛使用的文件格式,主要用于封装Java类库,使得开发者可以将多个类文件、资源文件以及元数据打包在一起,便于分发和部署。本话题将聚焦于“jar包所在文件夹”,并讨论其中...

    贪吃蛇2(java语言设计)

    该贪吃蛇是用java语言写的。贪吃蛇可以吃到普通豆,加分豆,变短豆等,来实现加分,变短等。设为10个级别,可自定义级别。键位可以自定义,蛇体颜色,...文件包含(jar,源代码,有详细的注释)喜欢的朋友支持一下。

    上海路劲佘山院子住宅建筑研发方案

    文件格式:pdf。文件大小:77.13MB。文档类型:方案(初设图),建筑方案文本。住宅类型:板式。高度类别:多层建筑。设计流派:artdeco。资料格式:幕墙。结构形式:钢筋混凝土结构。项目位置:上海。图纸格式:PDF...

    桌面路劲更改工具(可修改桌面文件保存至D盘)

    在选择D盘或其他合适的位置后,工具会自动处理桌面文件的迁移工作,包括桌面快捷方式和实际的文件内容。 迁移过程中,用户需要注意的是,确保D盘或者其他目标盘符有足够的空间来容纳桌面文件。同时,为了保证迁移...

Global site tag (gtag.js) - Google Analytics