这是我的 WCF REST 端点:
[WebInvoke(Method = "POST", UriTemplate = "_test/upload")]
public void UploadImage(Stream data)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.OK;
try
{
var parser = new MultipartParser(data);
var ext = Path.GetExtension(parser.Filename);
var filename = string.Format("{0}{1}", Guid.NewGuid().ToString("N"), ext);
var folder = HttpContext.Current.Server.MapPath(@"~\Uploads\");
var filepath = Path.Combine(folder, filename);
File.WriteAllBytes(filepath, parser.FileContents);
}
catch (Exception)
{
WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.InternalServerError;
}
}
我正在使用这里的多部分解析器:http: //antscode.blogspot.com/2009/11/parsing-multipart-form-data-in-wcf.html
我的问题是,上述方法对某些文件(.bat、.txt、.cs、.doc)非常有效——我在 Fiddler 中看到了所有好的迹象,包括 200(OK)状态。
当我尝试上传其他文件(.xls、.vsd)时,它以 400(错误请求)状态失败。我很惊讶 .doc 会起作用,而 .xls 和 .vsd 会失败。
它也是一致的。我已经成功上传了几个 .doc 文件,没有任何失败。我还尝试上传几个 .xls 文件 - 有些成功,有些失败(成功始终一致,失败始终一致)。当我写这篇文章并测试越来越多的文件时,有一个 .pdf 文件始终会产生 504(提琴手 - 接收失败)错误。
仅供参考,我在客户端上使用 Flex 并使用 FileReference 类进行上传。Flex 代码与它们一样标准 - 使用此代码,唯一的变化是 WCF REST URL:http ://blog.flexexamples.com/2007/09/21/uploading-files-in-flex-using-the -文件参考类/
任何想法为什么我看到一些失败和一些成功?我看不出两者有什么区别?
提前致谢。