【发布时间】:2017-04-10 11:27:41
【问题描述】:
我正在尝试接收这条 Multipart Post 消息:
POST /api/Image/Upload HTTP/1.1 Host: ServerName Content-Type:
multipart/form-data;
boundary=-------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D
Connection: keep-alive Accept: */* filename: DefaultPrefix1.jpg
User-Agent: KameraApp/1 CFNetwork/808.3 Darwin/16.3.0 Content-Length:
5492253 Accept-Language: da-dk Accept-Encoding: gzip, deflate
---------------Boundary----------35042EC1-790C-4CDD-8E21-66E6B1025C2D Content-Disposition: form-data; name='image';
filename="DefaultPrefix1.jpg" Content-Type: image/jpg
Image Data
End boundary
这就是我目前正在尝试的方式:
[RoutePrefix("api/Image")]
public class ImageController : ApiController
{
[HttpPost]
[Route("Upload")]
public async Task<IHttpActionResult> UploadAsync()
{
var uploadPath = HostingEnvironment.MapPath("/") + "Uploads";
Directory.CreateDirectory(uploadPath);
var provider = new MultipartFormDataStreamProvider(uploadPath);
await Request.Content.ReadAsMultipartAsync(provider);
// Files
//
foreach (MultipartFileData file in provider.FileData)
{
Debug.WriteLine(file.Headers.ContentDisposition.FileName);
Debug.WriteLine("File path: " + file.LocalFileName);
}
// Form data
//
foreach (var key in provider.FormData.AllKeys)
{
foreach (var val in provider.FormData.GetValues(key))
{
Debug.WriteLine(string.Format("{0}: {1}", key, val));
}
}
return Ok("Working");
}
}
我还为文件的大小添加了这个
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" maxRequestLength ="100000"/>
</system.web>
我可以看到文件的一部分已上传到上传文件夹,但我一直遇到客户端断开连接的问题。我没有遇到这个问题,因为 PHP 脚本只是拾取文件并将其移动到我选择的文件夹我不是 PHP 开发人员,所以我现在选择了更适合我的东西来构建更高级的版本,但是我正在努力接收文件..
对我做错了什么有什么建议吗?
我尝试恢复到在 mac 服务器上工作的 PHP 脚本,看看它是否更基本。当我在 Windows 服务器上运行 PHP 脚本时,我得到了
[2017 年 4 月 11 日星期二 12:38:05] [IP]:[端口号] 无效请求(意外 EOF)
当我在 Mac 上运行 PHP 脚本以测试应用程序时,并没有发生这种情况。所以现在我的问题是它是否与我在 Web API 上遇到的 EOF 问题相同。以及如何解决 EOF 问题?我不认为我可以在 Windows 中解决它,因为 Windows 找不到文件的结尾。 ?
【问题讨论】:
标签: c# asp.net asp.net-web-api asp.net-web-api2