HttpClient StreamContent追加文件名两次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient StreamContent追加文件名两次相关的知识,希望对你有一定的参考价值。

我正在使用Microsoft Http客户端库从Windows Phone 8向服务器发出多部分请求。它包含具有json字符串的String内容和具有图像流的Stream Content。现在我获得状态OK并请求服务器上的命中。但是日志说服务器无法获取图像的文件名。

content.Add(new StreamContent(photoStream), "files", fileName);

其中photoStream是图像流,“files”是内容的名称,文件名是图像文件的名称。

所以标头值必须是:

Content-Disposition: form-data; name=files; filename=image123.jpg

但实际上它是:

Content-Disposition: form-data; name=files; filename=image123.jpg; filename*=utf-8''image123.jpg

为什么它附加“; filename*=utf-8''image123.jpg”部分。这是一个问题吗?

请告诉我任何无法从WP8上传图片的原因/可能性。

答案
using (var content = new MultipartFormDataContent())
{
    content.Add(CreateFileContent(imageStream, fileName, "image/jpeg"));
}

private StreamContent CreateFileContent(Stream stream, string fileName, string contentType)
{
    var fileContent = new StreamContent(stream);
    fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data") 
    { 
        Name = ""files"", 
        FileName = """ + fileName + """
    };
    fileContent.Headers.ContentType = new MediaTypeHeaderValue(contentType);            
    return fileContent;
}
另一答案

对我来说,使用HttpStringContent而不是StreamContent,Damith的解决方案没有成功,但最后我找到了这个:

var fd = new Windows.Web.Http.HttpMultipartFormDataContent();
var file = new Windows.Web.Http.HttpStringContent(fs);
file.headers.contentType = new Windows.Web.Http.Headers.HttpMediaTypeHeaderValue("application/octet-stream");
fd.add(file);
file.headers.contentDisposition = new Windows.Web.Http.Headers.HttpContentDispositionHeaderValue.parse("form-data; name="your_form_name"; filename="your_file_name"");
另一答案

我的简单方案:

HttpContent fileStreamContent = new StreamContent(new FileStream(xmlTmpFile, FileMode.Open));
var formData = new MultipartFormDataContent();
formData.Add(fileStreamContent, "xml", Path.GetFileName(xmlTmpFile));
fileStreamContent.Headers.ContentDisposition.FileNameStar = null;

以上是关于HttpClient StreamContent追加文件名两次的主要内容,如果未能解决你的问题,请参考以下文章

POST StreamContent 与多个文件

如何修复 RemoteJSDataStream NullReferenceException?

C# StreamContent 和 File.OpenRead() 不产生 HTTP'able 多部分内容

http header

HttpResponeMessage 返回 401(未经授权)

论httpclient上传带参数commons-httpclient和apache httpclient区别