我有一个尝试中的插件的示例代码。
HttpResponseMessage hrm = client.PostAsync(uri, content).GetAwaiter().GetResult();
if (hrm.StatusCode == HttpStatusCode.OK)
{
MultipartMemoryStreamProvider provider = hrm.Content.ReadAsMultipartAsync().GetAwaiter().GetResult();
if (provider.Contents.Count > 0)
{
for (int i = 0; i < provider.Contents.Count; i++)
{
HttpContent rcontent = provider.Contents[i];
byte[] bytes = rcontent.ReadAsByteArrayAsync().GetAwaiter().GetResult();
File.WriteAllBytes(@"c:\temp\ConvertToPDF" + i + ".pdf", bytes);
}
}
}
此代码将n个文件发布到api,并以pdf格式获取相同的文件作为响应。
然后将响应保存到其他文件中。目前,MultipartMemoryStreamProvider
在Contents
集合中有n个文件。但是,这两个文件实际上都指向我选择的最后一个文件。
创建请求的代码
//Multipart content
MultipartContent content = new MultipartContent();
foreach (var singleFile in files)
{
//Create the StreamContent of the input file and add to the MultpartContent
StreamContent is1 = new StreamContent(singleFile.InputStream);
is1.Headers.ContentType = new MediaTypeHeaderValue(singleFile.ContentType);
is1.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
is1.Headers.ContentDisposition.Name = singleFile.FileName;
is1.Headers.ContentDisposition.FileName = singleFile.FileName;
content.Add(is1);
}
这是创建内容对象的代码。我检查了该对象,它实际上包含两个不同的文件。所以,我不确定为什么下面这行会引起问题。
MultipartMemoryStreamProvider provider = hrm.Content.ReadAsMultipartAsync().GetAwaiter().GetResult();
P.S。插件名称为ActivePDF DocConverter。遗憾的是,它不提供托管的演示链接,因此我无法在此处提供网址。我正在使用本地计算机托管该插件。
答案 0 :(得分:0)
好的,所以我知道了。原来,转换工具在返回转换后的文件时正在对文件名进行替换。因此,test.xls和test.doc都可以正确转换,但是两者的新文件名为test.pdf。显然,插件未考虑文件名可以相同的事实。 因此,默认情况下,我决定在文件名中添加一个计数器。下面是更新的代码。
foreach (var singleFile in files)
{
//Create the StreamContent of the input file and add to the MultpartContent
StreamContent is1 = new StreamContent(singleFile.InputStream);
is1.Headers.ContentType = new MediaTypeHeaderValue(singleFile.ContentType);
is1.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
is1.Headers.ContentDisposition.Name = singleFile.FileName;
is1.Headers.ContentDisposition.FileName = x + singleFile.FileName;
content.Add(is1);
x++;
}
x
只是一个整数变量。我知道它很脏,但是除了要求插件团队修复其代码外,这似乎是唯一的解决方案。