java读取web工程目录之外的图片并显示

可以有2种方式,1:目录映射,2:读取流


方式1:

需要在conf目录下对server.xml做修改,就是在<host></host>标签之间加入
<Context path="images" docBase="D:\pictureFiles" debug="0"/>  //映射D盘pictrueFiles文件夹到项目路径
然后在web页面访问文件夹下图片如下:
<img src="/images/1.jpg" />

 

方式2: 

实现用HTTP连接获取一张图片,在servlet中转为流之后输出,这样访问一个service之后就能直接得到图片流并显示出来

类似于访问一个图片的src(html)中会向一个http://localhost:8080/webproj/i.jpg发送请求,于是浏览器就会显示这张图片出来,现在要实现一个后台的service,做的是同样的事情但是请求的却是service,而这个service就返回了图片流回来


	/**
	 * 获取图片
	 * @param request
	 * @param response
	 */
	public void GetImage(HttpServletRequest request  
			, HttpServletResponse response){
		try {  
            URL url = new URL("http://csdnimg.cn/www/images/csdnindex_logo.gif");  
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
            conn.setRequestMethod("GET");  
            conn.setConnectTimeout(5 * 1000);  
            InputStream inStream = conn.getInputStream();//通过输入流获取图片数据  
	        byte data[] = readInputStream(inStream);
	        inStream.read(data);  //读数据   
	        inStream.close();   
	        response.setContentType("image/jpg"); //设置返回的文件类型   
	        OutputStream os = response.getOutputStream();  
	        os.write(data);  
	        os.flush();  
	        os.close(); 
        } catch (Exception e) {  
            e.printStackTrace();  
        } 
	}
	
	
	 public static byte[] readInputStream(InputStream inStream) throws Exception{  
	        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
	        byte[] buffer = new byte[2048];  
	        int len = 0;  
	        while( (len=inStream.read(buffer)) != -1 ){  
	            outStream.write(buffer, 0, len);  
	        }  
	        inStream.close();  
	        return outStream.toByteArray();  
	 }  
	 
	 
	
	
	/**
	 * 上传首页图片
	 * @param request
	 * @param response
	 */
	public void UploadHomeImage(HttpServletRequest request  
			, HttpServletResponse response){
		//存储文件,同时获取表单中的输入值对
		Map<String, String> nameValuePair = new HashMap<String, String>();
		
		//户型图片存储对象
		HomeImage homeImage = new HomeImage();
		
		//获取存储的地址,同时捕获参数值对
		String imageUrl = saveUploadFile(request,  "/Upload/HomeImage/", nameValuePair);
		
        homeImage.setImageUrl(imageUrl);
		homeImage.setUploadDate(new Date());
		
		settingService.saveOrUpdateHomeImage(homeImage);
		
		//获取信息界面显示类
		HomeImagePage responsePage = settingService.getWebHomePage();
		
		//将页面显示数据类转化为JSON,返回前端
		responseOutWithJson(response, responsePage);
		response.setStatus(HttpServletResponse.SC_OK);
	}


可用于读取web工程目录之外的图片并显示

采用nutz框架实现的:

	@At("/getSrcImg")
	public void getSrcImg(HttpServletRequest request, HttpServletResponse response,String fileName){
		System.out.println("getSrcImg, fileName="+fileName);
		try {	       	
			String tPath  = "E:\\img\\" + fileName;
			byte data[] = FileUtils.getFileContent(tPath);   
			response.setContentType("image/jpg"); //设置返回的文件类型     
			OutputStream os = response.getOutputStream();    
			os.write(data);    
			os.flush();
			os.close();
		} catch (Exception e) {    
			e.printStackTrace();    
		}   

		System.out.println("test");
	}

	/**
	 * 获取文件内容
	 * @param filePath
	 * @return
	 * @throws IOException
	 */
	public static byte[] getFileContent(String filePath) throws IOException {  
		File file = new File(filePath);  
		long fileSize = file.length();  
		if (fileSize > Integer.MAX_VALUE) {  
			System.out.println("file too big...");  
			return null;  
		}  
		FileInputStream fi = new FileInputStream(file);  
		byte[] buffer = new byte[(int) fileSize];  
		int offset = 0;  
		int numRead = 0;  
		while (offset < buffer.length  
				&& (numRead = fi.read(buffer, offset, buffer.length - offset)) >= 0) {  
			offset += numRead;  
		}  
		// 确保所有数据均被读取  
		if (offset != buffer.length) {  
			throw new IOException("Could not completely read file "  
					+ file.getName());  
		}  
		fi.close();  
		return buffer;  
	}  

据说这种方式比较耗内存,如果图像很大,比如10多M的话,改成流式会好点


试试:


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用Java的ZipOutputStream类来压缩文件夹并生成zip文件,接着使用Java的FileInputStream类将生成的zip文件输出到response中,实现文件下载。以下是一个示例代码: ```java // 设置要压缩的文件夹路径 String folderPath = "path/to/folder"; // 设置生成的zip文件名 String zipFileName = "example.zip"; // 创建zip输出流 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFileName)); // 创建缓冲输出流 BufferedOutputStream bufferedOut = new BufferedOutputStream(zipOut); // 获取要压缩的文件夹下的所有文件 File folder = new File(folderPath); File[] files = folder.listFiles(); // 遍历文件夹下的所有文件,将它们添加到zip输出流中 for (File file : files) { FileInputStream fileIn = new FileInputStream(file); BufferedInputStream bufferedIn = new BufferedInputStream(fileIn, 1024); zipOut.putNextEntry(new ZipEntry(file.getName())); byte[] buffer = new byte[1024]; int readCount = 0; while ((readCount = bufferedIn.read(buffer)) != -1) { bufferedOut.write(buffer, 0, readCount); } bufferedIn.close(); } // 关闭zip输出流和缓冲输出流 bufferedOut.flush(); bufferedOut.close(); zipOut.close(); // 将生成的zip文件输出到response中,实现文件下载 response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileName + "\""); FileInputStream fileIn = new FileInputStream(zipFileName); BufferedInputStream bufferedIn = new BufferedInputStream(fileIn, 1024); byte[] buffer = new byte[1024]; int readCount = 0; while ((readCount = bufferedIn.read(buffer)) != -1) { response.getOutputStream().write(buffer, 0, readCount); } bufferedIn.close(); ``` 请注意,上述代码中的response是HttpServletResponse对象,您需要在web环境下使用此代码。如果您是在命令行环境下运行Java程序,则需要将生成的zip文件复制到您的本地文件系统中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值