- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写一个 Web API 服务,我想在其中接受一个文件(图像)和一个包含有关图像的关键信息的序列化对象 (JSON)。图像部分没有问题,但是当我添加包含反序列化对象的字符串内容时,我在尝试确定哪个是哪个并采取相应措施时遇到问题。
客户端代码如下所示:
HttpClient client = new HttpClient();
MultipartFormDataContent content = new MultipartFormDataContent();
content.Add(new StreamContent(File.Open("c:\\MyImages\\Image00.jpg", FileMode.Open)), "image_file", "Image00.jpg");
ImageKeys ik = new ImageKeys { ImageId = "12345", Timestamp = DateTime.Now.ToString() };
JavaScriptSerializer js = new JavaScriptSerializer();
if (ik != null)
{
content.Add(new StringContent(js.Serialize(ik), Encoding.UTF8, "application/json"), "image_keys");
}
string uri = "http://localhost/MyAPI/api/MyQuery/TransferFile";
var request = new HttpRequestMessage()
{
RequestUri = new Uri(uri),
Method = HttpMethod.Post
};
request.Content = content;
string responseStr = "";
try
{
HttpResponseMessage result = client.SendAsync(request).Result;
string resultContent = string.Format("{0}:{1}", result.StatusCode, result.ReasonPhrase);
//
// Handle the response
//
responseStr = resultContent;
}
catch (Exception ex)
{
responseStr = ex.Message;
}
listBox1.Items.Add(responseStr);
HttpRequestMessage request = this.Request;
HttpResponseMessage ret = new HttpResponseMessage();
//
// Verify that this is an HTML Form file upload request
//
if (!request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = "c:\\tmp\\uploads";
if (!Directory.Exists(root))
{
Directory.CreateDirectory(root);
}
//
// Create a stream provider for setting up output streams that saves the output under c:\tmp\uploads
// If you want full control over how the stream is saved then derive from MultipartFormDataStreamProvider
// and override what you need.
//
MultipartFormDataStreamProvider streamProvider = new MultipartFormDataStreamProvider(root);
try
{
await request.Content.ReadAsMultipartAsync(streamProvider);
foreach (var file in streamProvider.Contents)
{
if (file.Headers.ContentDisposition.Name == "image_file")
{
FileInfo finfo = new FileInfo(streamProvider.FileData.First().LocalFileName);
string destFile = Path.Combine(root, streamProvider.FileData.First().Headers.ContentDisposition.FileName.Replace("\"", ""));
//
// File.Move cannot deal with duplicate files
// Ensure that the target does not exist.
//
if (File.Exists(destFile))
{
File.Delete(destFile);
}
File.Move(finfo.FullName, destFile);
}
else if (file.Headers.ContentDisposition.Name == "image_keys")
{
// deserialize key class
string str = file.ReadAsStringAsync().Result;
JavaScriptSerializer js = new JavaScriptSerializer();
ImageKeys ik = js.Deserialize<ImageKeys>(str);
}
}
ret.StatusCode = HttpStatusCode.OK;
ret.Content = new StringContent("File uploaded.");
}
catch (Exception ex)
{
ret.StatusCode = HttpStatusCode.UnsupportedMediaType;
ret.Content = new StringContent("File upload failed.");
}
return ret;
最佳答案
您可以将 Content 转换为 MultipartFormDataContent 并对其进行迭代。根据内容类型,您可以将其作为文件或字符串读取。字符串内容类型示例:
var dataContents = request.Content as MultipartFormDataContent;
foreach (var dataContent in dataContents)
{
var name = dataContent.Headers.ContentDisposition.Name;
var value = dataContent.ReadAsStringAsync().Result;
...
}
关于c# - 如何解析 MultipartFormDataContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30783360/
我正在尝试将文件和一些键值对上传到服务器。 服务器的 IT 人员告诉我“当我们的服务器收到请求时,文件显示得很好,但是您的键值对中的任何数据都没有显示在请求中(因为它是由 ASP.Net 解析的)。我
我正在编写一个 Web API 服务,我想在其中接受一个文件(图像)和一个包含有关图像的关键信息的序列化对象 (JSON)。图像部分没有问题,但是当我添加包含反序列化对象的字符串内容时,我在尝试确定哪
我正在寻找一种在一个请求中发送模型和图像的方法。我试图从 body 发送我的模型,但我不知道如何发送文件。除了在不同的文件中发送图像和模型之外,还有其他方法吗? 这是来 self 的 API 的 PO
有人要求我在 C# 中执行以下操作: /** * 1. Create a MultipartPostMethod * 2. Construct the web URL to connect to th
我正在使用 MultipartFormDataContent 将文件上传到 rest API。这很好用,但我的问题集中在使用 Add(...) 方法包含文件内容的正确方法上。目前我正在这样做: str
有没有办法获取 MultipartFormDataContent 的字符串表示形式以进行调试? 我已经尝试过 var x = multipart.ToString(); 但它返回了 System.Ne
我正在尝试在真实案例场景中发布 MultipartFormDataContent,数据内容对象可以包含从简单字符串到视频文件的任何内容,我在那里使用序列化对象,这只是一个概念证明。 另外我想指出,使用
我正在使用此代码上传多个文件并且运行良好。它使用现代 httpclient 库。 public async Task PostImages (int platform, string url, Lis
考虑下面的这个小代码: var client = new HttpClient(); var multiForm = new MultipartFormDataContent(); var str =
有一个允许用户上传文件的表单。这里没什么好看的。文件被 Controller 捕获为 HttpPostedFileBase。 然后从 Controller 将 HttpPostedFileBase 发
我有一个 WebAPI 服务,它使用 读取包括文件数据在内的发布数据 HttpContext.Request as key value pairs HttpContext.Current.Reques
我有这个遗留的 C# 代码(我不懂 C#),我需要用 Javascript 编写相同的功能(我非常了解 JS)。所以 C# 代码是: static JavaScriptSerializer seria
formData.Add(sJobId,"job_id");正在向服务器发送“job_id\r\n” 这是我的 C# 方法: public static async Task UploadAsync(
我有以下代码: private static string boundary = "----CustomBoundary" + DateTime.Now.Ticks.ToString("x"); pr
我正在使用 HttpClient 将 MultipartFormDataContent 发布到 Java 网络应用程序。我正在上传几个 StringContents 和一个文件,我使用 Multipa
考虑以下代码: MultipartFormDataContent MPFD = new MultipartFormDataContent(); MPFD.Add(new StringConte
我正在尝试上传多个文件。 val ktorVersion = "1.5.0" val serializationVersion = "1.0.1" 我就是这样做的: override suspen
我正在尝试使用 MultipartFormDataContent 在 HTTP POST 中发送一个大文件以及一些其他数据。为了以 block 的形式发送文件,我使用了 PushStreamConte
I'm trying to use an Autorest generated C# client to send MultipartFormDataContent but the reques
我需要发布一个请求,其中包含:一个定义为字符串的 xml 和一个 json。我在正确设置内容和处理 JToken 方面遇到问题。 Fiddler 中的原始请求如下所示: 内容类型:多部分/表单数据;边
我是一名优秀的程序员,十分优秀!