关于VB.NET HttpClient上传附件的问题!(语言-java)

该问题来自社区帖: https://bbs.csdn.net/topics/617223621.为符合问答规范, 该问题经过ChatGPT优化
```html

以下是我需要优化的问题:

VB.NET HttpClient上传附件的问题:

Dim filename = Path.GetFileName(file)
Dim client As HttpClient = New HttpClient()
Dim postData As List(Of KeyValuePair(Of String, String)) = New List(Of KeyValuePair(Of String, String))
postData.Add(New KeyValuePair(Of String, String)("filename", filename))

Dim content As HttpContent = New FormUrlEncodedContent(postData)
content.Headers.ContentType.MediaType = "multipart/form-data"
Dim response = Await client.PostAsync("http://huseeyon.gnway.cc:8088/seeyon/rest/attachment?token=6a7bf657-1733-4751-b4aa-ca7a49739ab6", content)

response.EnsureSuccessStatusCode()
Dim responseBody As String = Await response.Content.ReadAsStringAsync()
Console.WriteLine(responseBody)

手工增加Headers.ContentType会报错提示. the request was rejected because no multipart boundary was found
不增加Headers.ContentType则提示http415,求解决
```

【以下回答由 GPT 生成】

该问题的根本原因是没有正确设置请求中的multipart boundary。下面是解决该问题的具体步骤:

  1. 首先需要引用System.Net.Http和System.Net.Http.Headers命名空间。

  2. 创建一个MultipartFormDataContent对象,用于添加要上传的文件数据和其他参数。将文件名添加到表单数据中:

Dim formData As MultipartFormDataContent = New MultipartFormDataContent()
formData.Add(New StringContent(filename), "filename")
  1. 创建一个HttpClient对象并发送POST请求。确保设置请求的Content-Type头部为"multipart/form-data":
Dim client As HttpClient = New HttpClient()
client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
Dim response = Await client.PostAsync("http://huseeyon.gnway.cc:8088/seeyon/rest/attachment?token=6a7bf657-1733-4751-b4aa-ca7a49739ab6", formData)
  1. 最后,根据服务器响应进行适当的处理。

完整的代码示例:

Imports System.Net.Http
Imports System.Net.Http.Headers

...

Dim filename = Path.GetFileName(file)
Dim formData As MultipartFormDataContent = New MultipartFormDataContent()
formData.Add(New StringContent(filename), "filename")

Dim client As HttpClient = New HttpClient()
client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))
Dim response = Await client.PostAsync("http://huseeyon.gnway.cc:8088/seeyon/rest/attachment?token=6a7bf657-1733-4751-b4aa-ca7a49739ab6", formData)

response.EnsureSuccessStatusCode()
Dim responseBody As String = Await response.Content.ReadAsStringAsync()
Console.WriteLine(responseBody)

请注意,设置请求的Content-Type头部应该是通过添加Accept头部来实现,HttpClient会自动处理Content-Type的生成。此外,确保文件在指定路径(file变量)中存在。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^