当前位置: 首页 > news >正文

Hutool的HttpUtil实现调用POST表单接口上传文件

1、客户端代码

private String uploadWithHutool(InputStream inputStream, String channelCode) {if (inputStream == null) {log.error("文件输入流为空,无法上传");return null;}DateTime date = DateUtil.date();String dateTime = DateUtil.formatDateTime(date);String fileName = "漳潭360" + dateTime + ".png";InputStreamResource inputStreamSource;try {inputStreamSource = new InputStreamResource(inputStream, fileName);} catch (Exception e) {log.error("文件输入流转换为InputStreamResource失败", e);return null;}try (HttpResponse response = HttpUtil.createPost(pictureSaveUrl).header("Content-Type", "multipart/form-data")// 设置表单参数(文件),第一个参数为接口接收的参数名(如"file").form("file", inputStreamSource)// 可选:添加其他表单参数(如果接口需要).form("channelCode", channelCode)// 执行请求.execute()) {// 获取响应体(根据接口返回格式调整,如JSON/文本)return response.body();} catch (Exception e) {log.error("截图文件上传失败", e);return null;}}

2、服务端接口代码

    @PostMapping("/add")@ApiOperation("视频截图保存接口")public Result<String> add(@Valid @RequestBody VideoPictureAddPO po) throws IOException {String pictureId = videoDevicePictureService.addVideoPicture(po);return Result.success(pictureId);}
@Data
public class VideoPictureAddPO {/*** 视频通道code,d_video_device*/@NotBlank(message = "视频通道code不能为空")private String channelCode;/*** 截图附件*/@NotNull(message = "截图附件不能为空")private MultipartFile file;}
@Overridepublic String addVideoPicture(VideoPictureAddPO addPO) {log.info("addVideoPicture addPO:{}", addPO);String channelCode = addPO.getChannelCode();MultipartFile file = addPO.getFile();LambdaQueryWrapper<DVideoDeviceDO> lambdaQueryWrapper = Wrappers.lambdaQuery();lambdaQueryWrapper.eq(DVideoDeviceDO::getChannelCode, channelCode);DVideoDeviceDO deviceDO = videoDeviceMapper.selectOne(lambdaQueryWrapper);Assert.notNull(deviceDO, buildBaseException(ARGUMENT_NOT_VALID, "摄像头不存在"));DateTime date = DateUtil.date();String dateTime = DateUtil.formatDateTime(date);String fileName = deviceDO.getStationName() + dateTime + ".png";Tuple tuple = attachmentService.uploadAttachmentWithoutAuthInfo("env-water-ecological", fileName, file);DVideoDevicePictureDO pictureDO = new DVideoDevicePictureDO();pictureDO.setId(IdUtil.getSnowflakeNextIdStr());pictureDO.setEnterpriseCode(deviceDO.getEnterpriseCode());pictureDO.setStationCode(deviceDO.getStationCode());pictureDO.setStationName(deviceDO.getStationName());pictureDO.setChannelCode(deviceDO.getChannelCode());pictureDO.setAttachmentId(tuple.get(0));pictureDO.setAttachmentName(fileName);pictureDO.setDataTime(date);this.save(pictureDO);return pictureDO.getId();}

结论:重点在于InputStreamResource转换输入流,以及httpUtil的post请求的header一定要加上.header("Content-Type", "multipart/form-data")

http://www.sczhlp.com/news/22041/

相关文章:

  • [信号与系统个人笔记]第一章 信号与系统的基本概念 - CUC
  • 做外贸网站有什么用网站seo优化的目的
  • 衡水做企业网站的公司常见的网络营销工具有哪些
  • 网站建设费用写创意百度一下你就知道手机版官网
  • 进入山东省住房和城乡建设厅网站永久免费客服系统有哪些软件
  • 北京备案网站二级域名注册
  • 一款免费的永久文件外链系统
  • 安卓编译包含本地aar报错:Direct local .aar file dependencies are not supported when building an AAR
  • 男女裸体直接做的视频网站谷歌google中文登录入口
  • 蛋糕教做网站自助建站免费建站平台
  • ip查询网站备案查询系统外链代发2分一条
  • 农村小伙创业做网站google推广技巧
  • 做淘客网站备案seo关键词如何布局
  • 网页游戏网站排行百度2022最新版本
  • 网站首页是乱码 其他页面正常谷歌seo优化公司
  • 做外贸网站公司哪家好如何制作一个网页链接
  • 宿州网站建设报价seo网络优化公司
  • 免费广州网站开发维护千万不要做手游推广员
  • Springboot 项目配置多数据源
  • 禅道部署
  • (第五篇)spring cloud之Ribbon负载均衡 - 教程
  • 城乡与住房建设部网站首页莆田百度推广开户
  • 南充 网站建设企业网络营销系统分析报告
  • wordpress 域名插件南宁seo外包平台
  • 吉安做网站的公司seo优化服务商
  • 做网站那个搜索引擎好我是新手如何做电商
  • wordpress 清空回收站最新国际新闻
  • 网站服务合同用交印花税吗软文范文
  • 京东网店怎么开外贸seo软文发布平台
  • o2o网站源码appseo研究