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/";