C# Body为form-data file文件上传至第三方接口

news/2024/11/16 3:27:36/文章来源:https://www.cnblogs.com/zengzhanping/p/18201829

1.首先,让我们看一下第三方API接口在Postman工具中的展示:

  • 请求方式:POST
  • 请求URL:http://192.168.100.246:30011/sino-qc/product/inspect/ocr-name
  • 请求Header:Content-Type: multipart/form-data
  • 请求Body:file(类型为file)

 

2.现在,让我们编写C#代码来实现文件上传功能。我们可以使用 HttpClient 类来发送HTTP请求,并通过 MultipartFormDataContent 类来构建上传文件的form-data格式。以下是完整的C#代码示例: 

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SinocareFileUploadWinForms.Utillity;namespace SinocareFileUploadWinForms
{public partial class MainForm : Form{private const string ApiUrl = "http://192.168.100.246:31861/product/inspect/ocr-name";//private string ApiUrl = Utillity.HttpRequestHelper.GetSinocareFileUploadUrl();public MainForm(){InitializeComponent();}private async void UploadButton_Click(object sender, EventArgs e){#region MyRegionOpenFileDialog dialog = new OpenFileDialog();dialog.Multiselect = true; // 允许多选文件dialog.Filter = "PDF Files (*.pdf)|*.pdf|All Files (*.*)|*.*";dialog.Title = "Select PDF Files";if (dialog.ShowDialog() == DialogResult.OK){var httpClient = new HttpClient();var content = new MultipartFormDataContent();content.Headers.ContentType.CharSet = "utf-8"; //设置字符集foreach (var filePath in dialog.FileNames){var fileStream = new FileStream(filePath, FileMode.Open);var fileContent = new StreamContent(fileStream);content.Add(fileContent, "files", Path.GetFileName(filePath));}try{var response = httpClient.PostAsync(ApiUrl, content);response.Wait();//等待请求结果if (response.Result.IsSuccessStatusCode){var jsonString = response.Result.Content.ReadAsStringAsync().Result;var jsonData = JObject.Parse(jsonString);var renameInstructions = jsonData["data"] as JArray;if (renameInstructions != null){foreach (var item in renameInstructions){var originalName = item["orginName"].ToString();var newName = item["newName"].ToString();var originalPath = dialog.FileNames.FirstOrDefault(path => Path.GetFileName(path) == originalName);if (originalPath != null){var directoryPath = Path.GetDirectoryName(originalPath);var newPath = Path.Combine(directoryPath, newName);try{File.Move(originalPath, newPath); // 尝试重命名文件MessageBox.Show($"文件重命名成功: {originalName} -> {newName}");}catch (IOException ioe){MessageBox.Show($"重命名文件时发生错误: {ioe.Message},文件: {originalName}");}catch (UnauthorizedAccessException uae){MessageBox.Show($"没有权限重命名文件: {uae.Message},文件: {originalName}");}catch (Exception ex){MessageBox.Show($"未知错误在重命名文件时发生: {ex.Message},文件: {originalName}");}}else{Console.WriteLine($"找不到原始文件: {originalName}");}//Console.WriteLine($"原文件名: {originalName}, 新文件名: {newName}");
                            }}}else{MessageBox.Show($"上传失败,错误码: {(int)response.Result.StatusCode}");}}catch (AggregateException ae){foreach (var innerEx in ae.InnerExceptions){MessageBox.Show($"发生错误: {innerEx.Message}");}}catch (Exception ex){MessageBox.Show($"发生错误: {ex.Message}");}}#endregion}}
}

我们首先指定第三方API的URL和选择要上传的文件路径。然后,我们创建一个 HttpClient 实例,并构建一个 MultipartFormDataContent 对象,将文件内容添加到form-data中。最后,我们发送POST请求并检查响应状态码以确保文件上传成功。

刚刚开始请求的时候一直收不到第三方API接口的响应,可以检查网关的配置文件或者管理界面,确认相关配置是否正确   https://blog.csdn.net/m0_45067620/article/details/136141032

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/709234.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VMware ESXi 6.7U3u macOS Unlocker OEM BIOS 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版) UI fix

VMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版) UI fixVMware ESXi 6.7U3u macOS Unlocker & OEM BIOS 集成 Realtek 网卡驱动和 NVMe 驱动 (集成驱动版) UI fix 此版本解决的问题:VMware Host Client 无法将现有虚拟…

Ubuntu系统下的mp4播放器

本文介绍了一款可用在Ubuntu操作系统下播放本地视频(如mp4格式)的软件:VLC,可用使用apt直接安装。安装介绍 这里推荐一个Ubuntu 20.04下可用的本地视频播放器,VLC。可用直接打开本地视频,速度也不错,可用使用apt安装。一般顺序是先安装媒体加码器: $ sudo apt-get inst…

RASP

背景和介绍 RASP(Runtime Application Self Protection, RASP)是一种安全解决方案,用于对特定应用提供个性化防护。它利用对应用内部数据和状态的洞察和观测,使其能够在该应用运行时,识别出可能被其他解决方案所忽视的威胁。 RASP工作原理 RASP封装并防护一个特定的应用程序…

TSN和DDS测试解决方案

时间敏感网络TSN技术是基于统一的网络时间,通过调度机制管理通信数据流,最终实现确定性与可预期的以太网通信系统。时间敏感网络TSN技术旨在提升以太网网络的实时性和可靠性,并提供灵活的网络资源管理。该技术的应用主要来源于传统以太网技术在面对实时性、确定性和低延迟等…

1024 程序员节日快乐

10月24日被认为是程序员节。1024是2的十次方,二进制计数的基本计量单位之一。Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 1024 程序员节日快乐 日期:2018-10-24 阿珏 谈天说地 …

龙哥量化:注册simnow上期所的期货仿真模拟交易账户教程步骤

永远顺着趋势交易在技术分析这种市场研究方法中,趋势的概念绝对是核心内容。分析师所使用的全部工具, 诸如支撑和阻挡水平、价格形态、移动平均线、趋势线等等,其唯一的目的就是辅助我们估量市场趋势, 从而顺应着趋势的方向做交易。在市场上, “永远顺着趋势交易”、“决不可…

fullcalendar-vue3插件实现时间资源图

用的vue3+最新版本:官网链接:https://fullcalendar.io/demos 效果如图:x轴为人员,y轴为当日的时间段: 1. 安装 引入npm install --save @fullcalendar/core @fullcalendar/resource @fullcalendar/resource-timegrid package.json 2. 附上代码<script> import { def…

简约博客系统1.0版本完成并上线

Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 简约博客系统1.0版本完成并上线 日期:2017-9-30 阿珏 折腾代码 浏览:2647次 评论:9条前言不知不觉的,从第一个亚子的博客系统到e…

萌化二次元-图库客户端发布

萌化二次元软件为我的图库客户端版本 Tips:当你看到这个提示的时候,说明当前的文章是由原emlog博客系统搬迁至此的,文章发布时间已过于久远,编排和内容不一定完整,还请谅解` 萌化二次元-图库客户端发布 日期:2017-10-12 阿珏 二次元 浏览:2986次 评论:8条萌化二次元-…

探讨篇(一):服务粒度的艺术 - 简化架构与避免服务泛滥

一、背景 上周小组有个需求上线牵扯9个应用(小组目前维护了26个服务,由于团队系统业务属性特征基于高可用、高性能原则拆分,有些是合理的,有些不是很合理的),同时上周OpsReview的一个微服务滥用典范案例(Promise服务A调用服务B,服务B只是读个配置数据返回,无具体业务逻…

探讨篇(二):分层架构的艺术 - 打造合理且高效的架构体系

上篇从服务粒度角度进行了探讨,本文继续从服务内的分层角度探讨。 本文的观点源自我在学习与实践过程中的深思熟虑,尚处于不断探索和验证的阶段。希望能“抛砖引玉”,激发更多的讨论与交流。让我们共同进步,在探讨与实证中寻求真知。 一、背景 应用分层看似直观,但实践中常…

别再发邮件了,必须在开源之夏后台申请,50%的人竟然都没有报名成功!

引言 近期我们注意到很多学生朋友通过邮件向导师申请报名,请注意!!!​这是无效的,请必须通过“开源之夏”官方后台申请报名,请仔细参考这篇【报名攻略】 所以,我们特此举办这次宣讲会,目的是向所有感兴趣的学生详细介绍Apache DolphinScheduler社区在开源之夏中提供的项…