使用 multipart/form-data 在服务器中上传文件 - C#
Upload file in server with a multipart/form-data - C#
我想在 WindChill(是 PTC 的 PLM)中上传文件。他们为我们提供了 REST API 服务来执行此操作。他们将文件上传分为 3 个阶段。
- 第 1 阶段 - 我们调用一个服务,在其中提供要上传的文件数。在这种情况下只有一个。
- 第 2 阶段 - A multipart/formdata 我们提供要上传的文件。
- 阶段 3 - 我们给出文件名、文件大小等的最后阶段...
我认为我的问题在第 2 阶段。
所有阶段 运行 均成功,但当我尝试打开上传的文件时,在本例中为 pdf,文件为空白,但页数与原始文件相同。我将上传文件的内容与原文件进行比较,里面的内容相同,但差别很大。原文是ANSI编码,上传的是UTF-8编码。所以,我认为我的问题是在第 2 阶段。
我对这个阶段有些怀疑。在 C# 中,我得到了文件的 bytes[],但最后我需要将这个字节传递给一个字符串,以便以多部分形式发送。我应该使用什么编码来获取字符串?我使用默认、UTF-8、UNICODE、ASCII 编码进行了测试,但没有。
这是 Post 请求正文的示例。在 C# 中,我使用 HTTPWebRequest 发出请求。
------boundary
Content-Disposition: form-data; name="Master_URL"
https://MyUrl/Windchill/servlet/WindchillGW
------boundary
Content-Disposition: form-data; name="CacheDescriptor_array"
844032:844032:844032;
------boundary
Content-Disposition: form-data; name="844032"; filename="newDoc.pdf"
Content-Type: application/pdf
%PDF-1.7 //// The content of the file starts here
%µµµµ
1 0 obj
........
------boundary--
在使用这种方法之前,我尝试将 bytes[] 转换为 ToBase64String 并发送如下正文:
------boundary
Content-Disposition: form-data; name="Master_URL"
https://MyUrl/Windchill/servlet/WindchillGW
------boundary
Content-Disposition: form-data; name="CacheDescriptor_array"
844033:844033:844033;
------boundary
Content-Disposition: form-data; name="844033"; filename="newDoc.pdf"
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjcNCiW1tbW1DQox ........ //// The content of the file starts here
------boundary--
在这种情况下,当我尝试打开文件时出现错误 "Failed to load PDF document"。文件已损坏。
我认为问题出在第2阶段,但我会分享我在最后阶段发送的正文以供您理解。
{"ContentInfo":[{"StreamId":844034,"EncodedInfo": "844034%3A40384%3A9276564%3A844034","FileName": "newDoc.pdf","PrimaryContent": true,"MimeType" : "application/pdf","FileSize" : 40384}]}
StreamId 和 EncodedInfo 是阶段 2 的 returns,我需要在阶段 3 中提供。
谁能看出我做错了什么?谁有一些提示可以帮助我解决这个问题?
非常感谢。
我有一个解决此类问题的重要提示。
使用邮递员。在邮递员中完成所有工作。完成工作后,您可以使用邮递员生成多种语言的代码。非常感谢。
我想在 WindChill(是 PTC 的 PLM)中上传文件。他们为我们提供了 REST API 服务来执行此操作。他们将文件上传分为 3 个阶段。
- 第 1 阶段 - 我们调用一个服务,在其中提供要上传的文件数。在这种情况下只有一个。
- 第 2 阶段 - A multipart/formdata 我们提供要上传的文件。
- 阶段 3 - 我们给出文件名、文件大小等的最后阶段...
我认为我的问题在第 2 阶段。 所有阶段 运行 均成功,但当我尝试打开上传的文件时,在本例中为 pdf,文件为空白,但页数与原始文件相同。我将上传文件的内容与原文件进行比较,里面的内容相同,但差别很大。原文是ANSI编码,上传的是UTF-8编码。所以,我认为我的问题是在第 2 阶段。
我对这个阶段有些怀疑。在 C# 中,我得到了文件的 bytes[],但最后我需要将这个字节传递给一个字符串,以便以多部分形式发送。我应该使用什么编码来获取字符串?我使用默认、UTF-8、UNICODE、ASCII 编码进行了测试,但没有。 这是 Post 请求正文的示例。在 C# 中,我使用 HTTPWebRequest 发出请求。
------boundary
Content-Disposition: form-data; name="Master_URL"
https://MyUrl/Windchill/servlet/WindchillGW
------boundary
Content-Disposition: form-data; name="CacheDescriptor_array"
844032:844032:844032;
------boundary
Content-Disposition: form-data; name="844032"; filename="newDoc.pdf"
Content-Type: application/pdf
%PDF-1.7 //// The content of the file starts here
%µµµµ
1 0 obj
........
------boundary--
在使用这种方法之前,我尝试将 bytes[] 转换为 ToBase64String 并发送如下正文:
------boundary
Content-Disposition: form-data; name="Master_URL"
https://MyUrl/Windchill/servlet/WindchillGW
------boundary
Content-Disposition: form-data; name="CacheDescriptor_array"
844033:844033:844033;
------boundary
Content-Disposition: form-data; name="844033"; filename="newDoc.pdf"
Content-Type: application/pdf
Content-Transfer-Encoding: base64
JVBERi0xLjcNCiW1tbW1DQox ........ //// The content of the file starts here
------boundary--
在这种情况下,当我尝试打开文件时出现错误 "Failed to load PDF document"。文件已损坏。
我认为问题出在第2阶段,但我会分享我在最后阶段发送的正文以供您理解。
{"ContentInfo":[{"StreamId":844034,"EncodedInfo": "844034%3A40384%3A9276564%3A844034","FileName": "newDoc.pdf","PrimaryContent": true,"MimeType" : "application/pdf","FileSize" : 40384}]}
StreamId 和 EncodedInfo 是阶段 2 的 returns,我需要在阶段 3 中提供。
谁能看出我做错了什么?谁有一些提示可以帮助我解决这个问题?
非常感谢。
我有一个解决此类问题的重要提示。 使用邮递员。在邮递员中完成所有工作。完成工作后,您可以使用邮递员生成多种语言的代码。非常感谢。