我正在使用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上传图片的原因/可能性。
答案 0 :(得分:11)
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;
}
答案 1 :(得分:0)
对我来说,使用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\"");

注意:在添加文件后设置contentDisposition绝对必要,否则标题将被" form-data"覆盖。
答案 2 :(得分:-2)
我的简单解决方案:
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;