通过servlet打开本地图片

本文介绍了一个基于JavaScript的图片点击事件处理方法,并展示了如何使用Servlet技术从服务器加载并显示图片。此外,还提供了一个打开本地Excel文件的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//li点击事件
	    $("#fileul").on("click","#fileli",function(){
	    	//图片格式
	    	var strFilter=".jpeg|.gif|.jpg|.png|.bmp|.pic|";

	    	var path=$(this).attr("path");
	    	var str=(path.substring(path.lastIndexOf('.'),path.length)).toLowerCase();
	    	if(strFilter.indexOf(str)>-1){//后缀是图片格式时才打开
	    		var filepath=parent.window.globedataserverurl + "/OpenImages?filepath="+path;//图片路径

		    	var bheight=$("body",window.parent.document).height();//获取body高度
		    	var bwidth=$("body",window.parent.document).width();//获取body宽度
		    	parent.showImagesDialog(filepath,bheight/5,bwidth/3);
	    	}
	    });

package com.globe.servlet;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 打开本地图片
 */
@WebServlet("/OpenImages")
public class OpenImages extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static final String basePath="E:/FTP/武汉局FTP";
       
    public OpenImages() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 支持跨域访问
		response.setHeader("Access-Control-Allow-Origin", "*");
		
		String filepath  = request.getParameter("filepath");
		filepath = new String(filepath.getBytes("ISO-8859-1"), "UTF-8");//处理请求参数路乱码
		//读取本地图片输入流  
        FileInputStream fis = new FileInputStream(basePath+filepath);
        //得到文件大小
        int i = fis.available();
        //byte数组用于存放图片字节数据
        byte[] buff = new byte[i];
        
        fis.read(buff);
        fis.close();
        
        //设置发送到客户端的响应内容类型
        response.setContentType("image/*");
        OutputStream out = response.getOutputStream();
        out.write(buff);
        out.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	}

}
/**
 * 打开本地Excel文件
 */
Desktop.getDesktop().open(new File("c:\SZP5.sql"));


### 实现 JSP 页面随机显示本地存储图片 为了实现在 JSP 页面中从服务器本地文件夹随机选择并显示图片的功能,可以通过以下方式完成: #### 1. 获取图片列表 首先,在 Java 后端获取目标文件夹中的所有图片文件。这一步骤通常放在 Servlet 中处理。 ```java import java.io.File; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; @WebServlet("/RandomImageServlet") public class RandomImageServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<String> imagePaths = getImageList(); if (!imagePaths.isEmpty()) { int randomIndex = (int)(Math.random() * imagePaths.size()); String imagePath = imagePaths.get(randomIndex); // 将路径设置为请求属性以便于在JSP页面访问 request.setAttribute("randomImagePath", imagePath); RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/showImage.jsp"); dispatcher.forward(request, response); } else { response.getWriter().println("No images found."); } } private List<String> getImageList(){ List<String> paths = new ArrayList<>(); File folder = new File(getServletContext().getRealPath("/images")); // 图片所在文件夹相对路径[^2] for (final File fileEntry : folder.listFiles()){ if(fileEntry.isFile() && isSupportedFormat(fileEntry.getName())){ // 判断是否支持的格式 paths.add(fileEntry.getAbsolutePath()); // 添加绝对路径到集合中 } } return paths; } private boolean isSupportedFormat(String fileName){ // 支持JPEG/JPG/PNG/BMP/GIF等常见图像格式 String[] supportedFormats = {"jpg","jpeg","png","bmp","gif"}; for(String format:supportedFormats){ if(fileName.toLowerCase().endsWith(format)){ return true; } } return false; } } ``` 此代码片段展示了如何创建一个 `RandomImageServlet` 来读取特定目录下的所有图片,并从中随机挑选一张作为返回给前端展示的内容。 #### 2. 显示选定的图片 接着,在名为 `showImage.jsp` 的 JSP 文件里编写 HTML 和 EL 表达式来呈现这张被选中的图片。 ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java"%> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Show Image</title> <style type="text/css"> img{ max-width: 100%; height:auto; display:block; margin-left:auto; margin-right:auto; border-radius:8px; box-shadow:rgba(0,0,0,.298039) 0 1px 4px; padding-top:2em; } </style> </head> <body> <h2 style='text-align:center;'>Here's Your Random Picture:</h2> <img src="${pageContext.request.contextPath}/getImage?path=${randomImagePath}" alt="Random Pic"> </body> </html> ``` 这里定义了一个简单的网页布局用于加载由 servlet 提供的随机图片链接。注意这里的 img 标签内的 src 属性指向了一个新的 URL `/getImage?path=...`, 这意味着还需要额外的一个servlet 或者控制器方法专门用来响应这个 GET 请求并将实际的二进制数据流发送回客户端浏览器[^1]。 #### 3. 处理图片输出至浏览器 最后,增加一个新的映射用于提供原始图片资源的服务: ```java @WebServlet("/getImage") public class GetImageServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException,IOException{ String path=req.getParameter("path"); try(FileInputStream fis=new FileInputStream(path);OutputStream os=resp.getOutputStream();){ byte[] buffer=new byte[fis.available()]; while(fis.read(buffer)>0){ os.write(buffer); } } catch(Exception e){ throw new RuntimeException(e.getMessage(),e); } } } ``` 这段程序负责接收来自 showImage.jsp 发起的 HTTP GET 请求,并根据传入参数定位对应的物理位置打开输入流,再将其内容逐字节复制到响应对象关联的输出流当中去,从而实现了向用户的浏览器传输完整的图形文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值