【问题标题】:Upload file in server with a multipart/form-data - C#使用 multipart/form-data 在服务器中上传文件 - C#
【发布时间】:2020-08-22 17:59:02
【问题描述】:

我想在 WindChill 中上传文件(是 PTC 的 PLM)。他们为我们提供了一个带有服务的 REST API 来执行此操作。他们将文件上传分为 3 个阶段。

  • 第 1 阶段 - 我们调用一项服务,在该服务中提供要上传的文件数量。在这种情况下只有一个。
  • 第 2 阶段 - 我们提供要上传的文件的 multipart/formdata。
  • 第 3 阶段 - 我们提供文件名、文件大小等的最后阶段...

我认为我的问题在第 2 阶段。 所有阶段都成功运行,但是当我尝试打开上传的文件(在本例中为 pdf)时,该文件是空白的,但与原始文件的页数相同。我将上传文件的内容与原始文件进行了比较,里面的内容是相同的,但有很大的不同。原件是 ANSI 编码,而上传的是 UTF-8 编码。所以,我认为我的问题在第 2 阶段。

我对这个阶段有些怀疑。在 C# 中,我得到了文件的字节 [],但最后我需要将此字节传递给一个字符串,以便以多部分形式发送。我应该使用什么编码来获取字符串?我使用默认的 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--

在这种情况下,当我尝试打开文件时,我收到错误“无法加载 PDF 文档”。文件已损坏。

我认为问题出在第 2 阶段,但我将分享我在最后阶段发送的正文以供您理解。

{"ContentInfo":[{"StreamId":844034,"EncodedInfo": "844034%3A40384%3A9276564%3A844034","FileName": "newDoc.pdf","PrimaryContent": true,"MimeType" : "application/pdf","FileSize" : 40384}]}

StreamId 和 EncodedInfo 是我需要在阶段 3 中提供的阶段 2 的返回值。

任何人都可以看到我做错了什么?有人有一些提示可以帮助我解决这个问题吗?

非常感谢。

【问题讨论】:

    标签: c# httpwebrequest multipartform-data ptc-windchill


    【解决方案1】:

    我有一个解决此类问题的重要提示。 使用邮递员。在邮递员中完成所有工作。完成工作后,您可以使用 postman 生成多种语言的代码。非常感谢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-20
      • 1970-01-01
      • 2013-11-26
      • 2015-10-23
      • 1970-01-01
      • 2018-09-20
      • 2019-08-27
      • 1970-01-01
      相关资源
      最近更新 更多