【发布时间】:2011-04-19 05:54:11
【问题描述】:
这是我的 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-filereference-class/
任何想法为什么我看到一些失败和一些成功?我看不出两者有什么区别?
提前致谢。
【问题讨论】:
-
我的第一个想法是您为这些文件发回的错误标头,但如果没有更多信息则无法确定。
-
@J_A_X,我不确定我是否跟随。由于我使用的是 FileReference,如何控制标头?我在哪里可以获取/设置这些信息?
-
哦等等,上传。显示 Flex 代码。
-
@J_A_X,与此处完全相同,唯一的变化是指向 Web 服务的 FILE_UPLOAD_URL 变量:blog.flexexamples.com/wp-content/uploads/…
标签: wcf apache-flex actionscript-3 rest filereference