后端接收文件和普通字段的Controller

1.postMan传参说明:

 

2.后端代码:

@RequestMapping(value = "/launchEvent", method = RequestMethod.POST)
	private void launchEvent(HttpServletResponse response, HttpServletRequest request) {
		if (!(request instanceof MultipartHttpServletRequest)) {
			returnErrorMsg(response, "请求类型不对");
			return;
		}
		// 表单数据和图片一起提交给后台,图片是以二进制对象形式
		MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
		// 声明文件地址集合,存入数据库
		List<Map<String, Object>> uploadImg = null;
		try {
			uploadImg = upload2Oss(multipartRequest.getFiles("image"));
		} catch (Exception e1) {
			log.debug(e1.getMessage());
			returnErrorMsg(response, e1.getMessage());
			return;
		}
		String result = "";
		Map<String, Object> paramsMap = getRequestMap(request);
		// 要校验的参数
		String[] paramsNames = new String[] { "activtytheme", "siteofactivity", "contactperson", "contactphonenumber",
				"startdate", "enddate", "truncationdate", "islimit", "numberofpeople", "activtymemo" };
		String message = ParamsChecker.checkMapNull(paramsNames, paramsMap);
		if (message != null && message.length() > 0) {
			returnErrorMsg(response, message);
			return;
		}
		paramsMap.put("themeimgurl", uploadImg.get(0).get("attachurl"));
		try {
			MiddleServiceBean middleservice = new MiddleServiceBean();
			// 连接中间层进行数据查询 , result:返回结果
			middleservice.setFunction("com.zykj.proprietorapp.service.EventService.launchEvent");
			middleservice.setData(paramsMap);
			result = MiddleService(request, middleservice);
			returnStructJsonMsg(response, result);
		} catch (IOException | ParamCheckException e) {
			returnErrorMsg(response, "发起活动失败");
		}
		return;
	}

1.这里是将前端的文件存放到了oss图片与服务器上,返回的直接是地址集合.

2.因为这里图片是必传的 , 所以有一个是否包含图片格式的 instanceof 校验,如果费必传 ,就不需要这句.

3.获取其他普通字段的方法:

static Map<String, Object> getRequestMap(HttpServletRequest request) {
		Map<String, Object> dataMap = new HashMap<>();
		Map requestParams = request.getParameterMap();
		for (Iterator iterator = requestParams.keySet().iterator(); iterator.hasNext();) {
			String name = (String) iterator.next();
			String[] values = (String[]) requestParams.get(name);
			String valueStr = "";
			for (int i = 0; i < values.length; i++) {
				valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
			}
			dataMap.put(name, valueStr);
		}
		return dataMap;
	}

 

通过request.getParameterMap();获取到参数集合,或者 request.getParameter("ParameterName");获取单个参数

 

4.上传普通图片到oss云图片服务器的代码:

public List<Map<String, Object>> upload2Oss(List<MultipartFile> multipartFiles) throws Exception {

		// 存储图片地址及后缀的集合
		List<Map<String, Object>> uploadImg = new ArrayList<>();
		// 判断图片格式的集合
		List<String> typeList = Arrays.asList("png", "jpg", "jpeg");
		// 遍历上传图片
		OSSClient ossClient = new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);
		for (MultipartFile multipartFile : multipartFiles) {
			// 构建文件名称
			String logOriginalName = multipartFile.getOriginalFilename();

			if (!typeList.contains(logOriginalName.substring(logOriginalName.lastIndexOf(".") + 1))) {
				throw new Exception("上传的文件格式不对,请上传png,jpg,jpeg格式的文件");
			}

			if (multipartFile.getSize() > (5 * 1 << 20)) {
				log.debug("图片大小不能超过5MB");
				throw new Exception("图片大小不能超过5MB");
			} else if (multipartFile.isEmpty() || multipartFile.getSize() <= 0) {
				log.debug("图片不能为空");
				throw new Exception("图片不能为空");
			}
			// 页面控件的文件流 ,获取文件的后缀
			String suffix = multipartFile.getOriginalFilename().substring(logOriginalName.lastIndexOf("."));
			// 使用MD5生成文件名称
			String logImageName = MD5.getMD5ValueofData(multipartFile.getBytes());

			// 存储路径
			// 建立阿里OSS连接.用于上传图片

			Long fileSize = (long) multipartFile.getBytes().length;
			// 创建上传Object的Metadata
			ObjectMetadata metadata = new ObjectMetadata();
			metadata.setContentLength(fileSize);
			// 指定该Object被下载时的网页的缓存行为
			metadata.setCacheControl("no-cache");
			// 指定该Object下设置Header
			metadata.setHeader("Pragma", "no-cache");
			// 指定该Object被下载时的内容编码格式
			metadata.setContentEncoding("utf-8");
			// 文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成,
			// 如果没有扩展名则填默认值application/octet-stream
			metadata.setContentType(AliyunOSSClientUtil.getContentType(suffix));
			// 指定该Object被下载时的名称(指示MINME用户代理如何显示附加的文件,打开或下载,及文件名称)
			metadata.setContentDisposition(logImageName);
			// 文件访问路径
			URL imgUrl = null;
			String tip = "上传文件失败!";
			try {
				// 上传文件
				ossClient.putObject(BACKET_NAME, FOLDER + logImageName, multipartFile.getInputStream(), metadata);
				// 获取上传后的文件对象
				OSSObject object = ossClient.getObject(new GetObjectRequest(BACKET_NAME, FOLDER + logImageName));
				// 获取文件的下载地址,通过传入backetName,KEY:文件夹名+图片名+后缀,date:有效时间
				imgUrl = ossClient.generatePresignedUrl(BACKET_NAME, object.getKey(),
						new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10));
				// 封装到结果集中
				Map<String, Object> map = new HashMap<>();
				map.put("attachurl", imgUrl);
				map.put("suffix", suffix);
				uploadImg.add(map);
			} catch (OSSException e) {
				log.debug(tip);
				throw new OSSException(tip);
			} catch (ClientException e) {
				log.debug(tip);
				throw new OSSException(tip);
			} catch (IOException e) {
				log.debug(tip);
				throw new OSSException(tip);
			}
		}
		ossClient.shutdown();
		return uploadImg;
	}

	// 阿里OSS的参数
	public final static String ENDPOINT = "http://oss-cn-beijing.aliyuncs.com";
	public final static String ACCESS_KEY_ID = "LTAIM95alBTrxHPD";
	public final static String ACCESS_KEY_SECRET = "VeYSm6Gq83XoMohUmwJJbT7upkKp6p";
	public final static String BACKET_NAME = "shhdltest";
	public final static String FOLDER = "zypic/";
	public final static String KEY = "http://shhdltest.oss-cn-beijing.aliyuncs.com/";

 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月存5k的欢乐外包仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值