MultipartHttpServletRequest上传图片到文件服务器

前端请求File  选择图片上传

 @RequestMapping("/save")
    @ResponseBody
    public  Map<String,Object> addSync(HttpServletRequest request, HttpServletResponse response) throws TokenTimeoutException, TokenMissException {
        UserBean user = this.detectUserBean(request).getUserBean();
        logger.info("图片开始上传!111111111111111111111111");
        Map<String,Object> result = new HashMap<>();

        String timeRoute = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        String folder = "upload/"+user.getDefaultArea().getAreaCode()+"/replyPic/"+timeRoute + "/";
        try {

            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            MultipartFile mf = multipartRequest.getFile("File");
            logger.info("图片开始上传!"+folder);
            Map<String, Object> a = FileUploadHandler.uploadPicHandler(mf, baseImgPath, folder,null);
            String picPath = a.get("picPath").toString();
            String ss = viewImgFileRootPath+picPath;
            logger.info("allPath->"+ss);
            a.put("allPath",viewImgFileRootPath+picPath);
            result.put("status",true);
            result.put("data",a );

        } catch (Exception e) {
            result.put("status",false);
        }
        return result;
    }
package com.xjgzinfo.zhwwpt.s.util;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import javax.imageio.ImageIO;

import org.apache.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;

import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageDecoder;


public final class FileUploadHandler {
	private static final Color TRANSLUCENT = new Color(Color.TRANSLUCENT);
	private static Logger logger = Logger.getLogger(FileUploadHandler.class);
	
	private FileUploadHandler(String fileName) {
	}
    
	/**
	 * 
	 * @Title: uploadPicHandler 
	 * @Description: 图片上传
	 * @param multipartFile
	 * @param targetDir 文件保存配置路径
	 * @param uploadDir 自定义路径
	 * @return
	 * @return: Map<String,Object>  code:0成功,1失败;error_message:失败提示内容;message:成功提示内容;picPath:成功相对路径,不包含文件保存配置路径
	 */

	public static Map<String,Object> uploadPicHandler(MultipartFile multipartFile,String targetDir,String uploadDir,String zplx){
		Map<String,Object> map = new HashMap<String,Object>();
		String fileSuffix = null;
		String originalFileName = multipartFile.getOriginalFilename();
		long originalFileSize = multipartFile.getSize();
		//验证图片后缀
		if(originalFileName.lastIndexOf(".") != -1){
			fileSuffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
			String tempFileSuffix = fileSuffix.substring(fileSuffix.lastIndexOf(".")+".".length());
			if(!verifyImageSuffix(tempFileSuffix)){
				map.put("code", "1");
				map.put("error_message", "非法的图片类型,仅允许后缀为jpg|jpeg|png|bmp|GIF|JPG|PNG|JPEG的类型图片");
				return map;
			}
		}else{
			map.put("code", "1");
			map.put("error_message", "非法的图片类型,仅允许后缀为jpg|jpeg|png|bmp|GIF|JPG|PNG|JPEG的类型图片");
			return map;
		}

		//验证图片大小
		if(originalFileSize >= 1024 * 1024 * 10){
			map.put("code", "1");
			map.put("error_message", "图片体积过大,请上传小于10M的图片");
			return map;
		}
						
		String targetFileName = System.currentTimeMillis()+fileSuffix;
		String targetFilePath = targetDir + uploadDir + targetFileName;
		File targetFile = new File(targetFilePath);
		if(!targetFile.getParentFile().exists()){
			targetFile.mkdirs();
		}
		try {
//			multipartFile.transferTo(targetFile);
			//给图片增加水印
			if ("身份证(正面)".equals(zplx)) {
				JPEGImageDecoder jpegDecoder = JPEGCodec.createJPEGDecoder(multipartFile.getInputStream());
				BufferedImage buffImg = jpegDecoder.decodeAsBufferedImage();
				int width = buffImg.getWidth();
				int height = buffImg.getHeight();
				// 创建相同大小的画图
				BufferedImage image = new BufferedImage(width, height,BufferedImage.TYPE_INT_ARGB);
				Graphics2D g = image.createGraphics();
				g.setBackground(TRANSLUCENT);
				g.dispose();
				WaterMarkImage wk = new WaterMarkImage();
				wk.drawString(image,"本图片仅限《XXXXX》使用!本图片仅限《XXXX》使用!本图片仅限《XXXX》使用!本图片仅限《XXXX》使用!本图片仅限《XXXXXX》使用!");
				Graphics2D gg = buffImg.createGraphics();
				gg.drawImage(image, 0, 0, null);
				g.dispose();
				ImageIO.write(buffImg, "jpg", targetFile);
			} else {
				multipartFile.transferTo(targetFile);
			}
			 
			
		} catch (Exception ex) {
			ex.printStackTrace();
			map.put("code", "1");
			map.put("error_message", "上传图片异常");
		}
		logger.info("上传的目标的文件:"+targetFile);
		if(targetFile.exists()){
			map.put("code", "0");
			map.put("message", "上传图片成功");
			map.put("picPath", uploadDir+targetFileName);
			map.put("absolutePath", targetFile.getAbsolutePath());
		}else{
			map.put("code", "1");
			map.put("error_message", "上传图片失败");
		}
		return map;
	}
	
	/**
	 * 验证图片后缀
	 * @param fileSuffix
	 * @return
	 */
	public static boolean verifyImageSuffix(String fileSuffix){
		boolean flag = false;
		String imageSuffix = "jpg|jpeg|png|bmp|GIF|JPG|PNG|JPEG";
		if(fileSuffix != null && fileSuffix.trim().length() > 0){
			flag = imageSuffix.contains(fileSuffix.trim());
		}
		return flag;
	}

	
	public static Map<String,Object> uploadFileHandler(MultipartFile multipartFile,String targetDir,String uploadDir){
		Map<String,Object> map = new HashMap<String,Object>();
		String fileSuffix = null;
		String originalFileName = multipartFile.getOriginalFilename();
		long originalFileSize = multipartFile.getSize();
		
		fileSuffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf("."));
						
		String targetFileName = System.currentTimeMillis()+fileSuffix;
		String targetFilePath = targetDir + uploadDir + targetFileName;
		File targetFile = new File(targetFilePath);
		if(!targetFile.getParentFile().exists()){
			targetFile.mkdirs();
		}
		try {
			multipartFile.transferTo(targetFile);
		} catch (Exception ex) {
			map.put("code", "1");
			map.put("error_message", "上传文件异常");
		}
		logger.info("上传的目标的文件:"+targetFile);
		if(targetFile.exists()){
			map.put("code", "0");
			map.put("message", "上传文件成功");
			map.put("picPath", uploadDir+targetFileName);
			map.put("absolutePath", targetFile.getAbsolutePath());
		}else{
			map.put("code", "1");
			map.put("error_message", "上传文件失败");
		}
		return map;
	}
	

	/**
	* 微信公众平台下载多媒体文件
	* @param downloadMediaUrl //接口地址
	* @param savePath //本地服务器保存地址
	* @author 
	* @throws Exception 
	*/
	public static Map<String,Object> downloadMedia(String downloadMediaUrl,String savePath){
		Map<String,Object> resp = new HashMap<String,Object>();
		try {
			System.out.println("==下载图片路径==>"+downloadMediaUrl);
			// 拼装请求地址
			URL url = new URL(downloadMediaUrl);
			HttpURLConnection con = (HttpURLConnection) url.openConnection();
			con.setRequestMethod("GET"); // 以Post方式提交表单,默认get方式
			con.setDoInput(true);
			con.setDoOutput(true);
			con.setUseCaches(false); // post方式不能使用缓存
			
			BufferedInputStream bis = new BufferedInputStream(con.getInputStream());
			File saveFie = new File(savePath);
			if (!saveFie.getParentFile().exists()){
		    	saveFie.getParentFile().mkdirs();
		    }
			FileOutputStream fos = new FileOutputStream(saveFie);
		    byte[] buf = new byte[8096];
		    int size = 0;
		    while ((size = bis.read(buf)) != -1)
	        fos.write(buf, 0, size);
	      	fos.close();
	      	bis.close();
	      	con.disconnect();
	      	System.out.println("==下载媒体文件成功,filePath==>" + saveFie);
			resp.put("code", "0");
		} catch (Exception e) {
			resp.put("code", "1");
			e.printStackTrace();
		}
		return resp; 
	}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在Java中实现el-upload上传多张图片到服务器,可以按照以下步骤进行: 1. 在前端使用el-upload组件,设置multiple属性为true,允许同时上传多张图片。 2. 在Java后端中,创建一个接收图片上传请求的接口。可以使用Spring MVC框架或者其他网页服务框架来创建接口。 3. 在接口中,获取前端传递的图片文件数据。可以使用HttpServletRequest对象来获取上传的文件数据。 4. 遍历获取到的文件数据,逐个保存到服务器的指定目录下。可以使用java.io包中的文件处理类来实现文件的保存操作。 5. 在保存完所有的图片文件后,可以返回一个成功的响应给前端,表示图片上传完成。 其中,关键的步骤是在Java后端中获取文件数据,并将文件保存到服务器的指定目录下。以下是一个简单的实现示例: ```java @RestController @RequestMapping("/upload") public class UploadController { @PostMapping("/images") public String uploadImages(HttpServletRequest request) { try { // 获取上传的文件数据 List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file"); // 遍历文件列表,逐个保存到服务器 for (MultipartFile file : files) { if (!file.isEmpty()) { // 获取文件名和文件扩展名 String originalFilename = file.getOriginalFilename(); String fileExtension = originalFilename.substring(originalFilename.lastIndexOf(".") + 1); // 生成新的文件名 String newFilename = UUID.randomUUID().toString() + "." + fileExtension; // 保存文件服务器指定目录 String savePath = "服务器指定目录路径" + newFilename; file.transferTo(new File(savePath)); } } // 返回成功响应给前端 return "图片上传成功"; } catch (Exception e) { // 返回错误响应给前端 return "图片上传失败"; } } } ``` 以上示例演示了如何使用Spring MVC中的MultipartHttpServletRequest对象来获取多个上传的文件数据,并使用MultipartFile对象来保存文件服务器的指定目录下。最后,根据上传的结果返回相应的响应给前端。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值