Java从服务器获得图片输入流InputStream,并使用response输出到页面

1、创建测试类(FileController.java)

package com.jeff.controller;

import java.io.InputStream;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.jeff.utils.HttpUtils;

@RestController
public class FileController {

	/**
	 * 
	 * @description: 从服务器端获得图片,并输出到页面
	 * @author: Jeff
	 * @date: 2019年12月7日
	 * @param resp
	 */
	@RequestMapping("getImage")
	public void getImage(HttpServletResponse resp) {
		// 服务器图片url
		String urlPath = "http://192.168.1.100:8080/images/jie.jpg";
		// 从服务器端获得图片,并输出到页面
		InputStream inputStream = HttpUtils.getInputStream(urlPath);
		HttpUtils.writeFile(resp, inputStream);
	}

}

2、创建http工具类(HttpUtils.java)

package com.jeff.utils;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import javax.servlet.http.HttpServletResponse;

public class HttpUtils {

	/**
	 * 
	 * @description: 从服务器获得一个输入流(本例是指从服务器获得一个image输入流)
	 * @author: Jeff
	 * @date: 2019年12月7日
	 * @return
	 */
	public static InputStream getInputStream(String urlPath) {
		InputStream inputStream = null;
		HttpURLConnection httpURLConnection = null;
		try {
			URL url = new URL(urlPath);
			httpURLConnection = (HttpURLConnection) url.openConnection();
			// 设置网络连接超时时间
			httpURLConnection.setConnectTimeout(3000);
			// 设置应用程序要从网络连接读取数据
			httpURLConnection.setDoInput(true);
			httpURLConnection.setRequestMethod("GET");
			int responseCode = httpURLConnection.getResponseCode();
			System.out.println("responseCode is:" + responseCode);
			if (responseCode == HttpURLConnection.HTTP_OK) {
				// 从服务器返回一个输入流
				inputStream = httpURLConnection.getInputStream();
			} else {
				inputStream = httpURLConnection.getErrorStream();
			}
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return inputStream;
	}

	/**
	 * 
	 * @description: 将输入流输出到页面
	 * @author: Jeff
	 * @date: 2019年12月7日
	 * @param resp
	 * @param inputStream
	 */
	public static void writeFile(HttpServletResponse resp, InputStream inputStream) {
		OutputStream out = null;
		try {
			out = resp.getOutputStream();
			int len = 0;
			byte[] b = new byte[1024];
			while ((len = inputStream.read(b)) != -1) {
				out.write(b, 0, len);
			}
			out.flush();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null) {
					out.close();
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

}

3、打开浏览器测试response输出到页面
在这里插入图片描述

  • 11
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个简单的上传图片服务器Java代码,带有注释: ```java import java.io.File; import java.io.IOException; import java.io.InputStream; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.UUID; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @RestController public class FileUploadController { // 设置上传文件的保存路径 private static String UPLOAD_DIR = "uploads/"; // 处理文件上传请求的方法 @PostMapping("/upload") public ResponseEntity<String> handleFileUpload(@RequestParam("file") MultipartFile file) { try { // 获取上传文件的原始文件名 String originalFileName = file.getOriginalFilename(); // 获取上传文件的后缀名 String fileExtension = originalFileName.substring(originalFileName.lastIndexOf(".")); // 生成唯一的文件名 String newFileName = UUID.randomUUID() + fileExtension; // 设置上传文件的保存路径和文件名 String uploadFilePath = UPLOAD_DIR + newFileName; // 获取上传文件输入 InputStream fileInputStream = file.getInputStream(); // 创建保存上传文件的目录 Path uploadDirPath = Paths.get(UPLOAD_DIR); if (!Files.exists(uploadDirPath)) { Files.createDirectories(uploadDirPath); } // 将上传文件保存到服务器 Files.copy(fileInputStream, Paths.get(uploadFilePath)); // 返回上传成功的响应 return ResponseEntity.ok().body("File uploaded successfully: " + uploadFilePath); } catch (IOException e) { // 返回上传失败的响应 return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("Failed to upload file"); } } } ``` 这是一个基于Spring Framework的文件上传控制器,使用了Spring的MultipartFile API处理文件上传。在代码中,我们首先设置了上传文件的保存路径,并定义了`handleFileUpload`方法来处理文件上传请求。在方法中,我们通过`file.getOriginalFilename()`方法获取上传文件的原始文件名,并通过`UUID.randomUUID()`方法生成了一个唯一的文件名,然后将上传文件保存到服务器上的指定目录中。最后,我们返回一个上传成功的响应或者上传失败的响应,具体取决于上传是否成功。 需要注意的是,上传文件的保存路径应该是一个绝对路径,可以根据具体项目的需要进行配置。在本例中,我们将上传文件保存到了当前项目的`uploads/`目录下。同时,为了避免上传文件的重名问题,我们使用了`UUID.randomUUID()`方法生成唯一的文件名。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值