尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

qw-33

qw-33
📅 发布时间:2026/6/19 22:30:38
import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.netty.http.client.HttpClient; import reactor.netty.http.client.HttpClientResponse; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 或 HSSFWorkbook import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.UUID; public class ExcelUploader { public static Mono<HttpClientResponse> uploadExcel( Workbook workbook, String originalFilename, String uploadUrl) { // Step 1: 将 Workbook 写入 byte[] byte[] excelBytes; try (ByteArrayOutputStream baos = new ByteArrayOutputStream()) { workbook.write(baos); excelBytes = baos.toByteArray(); } catch (IOException e) { return Mono.error(new RuntimeException("Failed to serialize workbook", e)); } // Step 2: 构建 multipart/form-data body String boundary = "----ReactorNettyBoundary" + UUID.randomUUID().toString(); String contentType = "multipart/form-data; boundary=" + boundary; Flux<ByteBuf> body = createMultipartData(boundary, excelBytes, originalFilename); // Step 3: 发送 POST 请求 return HttpClient.create() .post() .uri(uploadUrl) .header("Content-Type", contentType) .send(body) .response(); // 返回响应,可进一步处理 } private static Flux<ByteBuf> createMultipartData(String boundary, byte[] fileBytes, String filename) { String crlf = "\r\n"; String twoHyphens = "--"; // Part 1: 文件头 String fileHeader = twoHyphens + boundary + crlf + "Content-Disposition: form-data; name=\"file\"; filename=\"" + filename + "\"" + crlf + "Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + crlf + crlf; // Part 2: 文件尾 String footer = crlf + twoHyphens + boundary + twoHyphens + crlf; return Flux.concat( // 文件头(文本) Flux.just(fileHeader) .map(s -> Unpooled.wrappedBuffer(s.getBytes(StandardCharsets.UTF_8))), // 文件内容(二进制) Flux.just(Unpooled.wrappedBuffer(fileBytes)), // 结尾 Flux.just(footer) .map(s -> Unpooled.wrappedBuffer(s.getBytes(StandardCharsets.UTF_8))) ); } }

相关新闻

  • qw-12
  • vscode cursor中在终端里使用claude code,经常会闪烁,并且粘贴进长文本会有问题。
  • revit api创建模型线

最新新闻

  • 2026郑州非急救转运救护车TOP5盘点|中原跨省、嵩山山地、院区转诊首选康跃转运 - 吉修匠
  • 2026.6.7
  • OpenFigen:开源AI模型服务化与工作流编排的工程实践指南
  • 2026东莞石龙工厂法律顾问哪家好?工厂法务首选5家律所盘点(首选广东卡夫律师事务所) - GrowthUME
  • 2026北京防水补漏权威指南:卫生间/屋面/外墙/地下室正规施工+透明报价+避坑全攻略 - 苏易修缮
  • 南通同城购宠指南:钟秀中路+天都花苑正规宠舍,无套路带质保 - 萌宠俱乐部

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号