我正在尝试使用服务器端的jquery,ajax和wcf来实现图像上传。 运营合同:
[WebInvoke(UriTemplate = "/createnewsfeedpost?fileName={fileName}", Method = "POST", ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
void CreateNewsfeedPost(Stream imageContent, string fileName);
操作实施:
public void CreateNewsfeedPost(Stream imageContent, string fileName)
{
byte[] buffer = new byte[32768];
using (var ms = new FileStream(@"C:/Temp/test.png", FileMode.CreateNew))
{
int bytesRead, totalBytesRead = 0;
do
{
bytesRead = imageContent.Read(buffer, 0, buffer.Length);
totalBytesRead += bytesRead;
ms.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);
}
}
客户端代码:
<a id="createNewsFeedPostButton" href="javascript:;">Share</a>
<input type="file" id="newsFeedImage" />
使用Javascript:
$(document).ready(function () {
$("#createNewsFeedPostButton").click(function () {
createNewsFeedPost();
});
});
function createNewsFeedPost() {
var fd = new FormData();
fd.append('file', $('#newsFeedImage')[0].files[0]);
$.ajax({
url:/createnewsfeedpost + "?fileName=test.png",
data: fd,
processData: false,
contentType: false,
type: 'POST',
success: function (data) {
alert('sas');
},
error: function (jqXHR, textStatus, errorThrown) {
alert(textStatus + ' / ' + errorThrown);
}
});
}
我能够在服务实现中获取填充的Stream对象,但问题是它有点损坏。如果我用记事本打开保存的文件,我可以看到一些奇怪的页眉和页脚。
标题:
-----------------------------7de17128101f8
Content-Disposition: form-data; name="file"; filename="C:\icon.png"
Content-Type: image/png
页脚:
-----------------------------7de17128101f8--
有没有办法摆脱这个页脚和标题?
答案 0 :(得分:2)
感谢Ray Nicholus的解决方案。我需要将消息体解析为多部分数据才能访问图像内容。我从here获取了多部分解析器。
更新了服务器端代码:
var parser = new MultipartParser(imageContent);
if (!parser.Success)
throw new ApplicationException("Error while parsing image file");
using (var ms = new FileStream(@"C:/Temp/test.png", FileMode.CreateNew))
{
ms.Write(parser.FileContents, 0, parser.FileContents.Length);
}