通过表单发布上传图片

Nik*_*las 7 c# post multipartform-data asp.net-web-api

我正在尝试通过multipart/form-data帖子上传图片,我正在使用下面的代码.我只会上传.jpg图片.

问题是保存的图像不是有效图像,无法查看.它也比我上传的文件大200个字节,所以我想我在这里遗漏了什么?

public class FileUploadController : ApiController
{
    public Task<HttpResponseMessage> PostUploadFile()
    {
        return UploadFileAsync().ContinueWith<HttpResponseMessage>((tsk) =>
            {
                HttpResponseMessage response = null;

                if (tsk.IsCompleted)
                {
                    response = new HttpResponseMessage(HttpStatusCode.Created);
                }
                else if (tsk.IsFaulted || tsk.IsCanceled)
                {
                   response = 
                   new HttpResponseMessage(HttpStatusCode.InternalServerError);
                }

                return response;
            });
    }

    public Task UploadFileAsync()
    {
        return this.Request.Content.ReadAsStreamAsync().ContinueWith((tsk) => 
        { SaveToFile(tsk.Result); },
        TaskContinuationOptions.OnlyOnRanToCompletion);
    }

    private void SaveToFile(Stream requestStream)
    {
        string path =
        System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory);
        using (FileStream targetStream = 
        File.Create(path + "/Uploads/" + DateTime.Now.ToFileTime() + ".jpg"))
        {
            using (requestStream)
            {
                requestStream.CopyTo(targetStream);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我用来发布图像的简单表单.

<form action="/api/postuploadfile" enctype="multipart/form-data" method="post">
    Upload Image:
    <input type="file" id="imagename" name="imagename" />
    <input type="submit" />
</form> 
Run Code Online (Sandbox Code Playgroud)

关于图像的信息,之前/之后:
如果我检查我上传的图像的属性,那么磁盘上大小与原始图像相同,但Size属性大200-205字节.无论我上传的图像有多大,情况总是如此.

这是POST标题的一部分.我不需要去除边界部分或任何东西?

Source
-----------------------------1944294225892 Content-Disposition: form-data;
name="imagename"; filename="small.jpg" Content-Type: image/jpeg
Run Code Online (Sandbox Code Playgroud)

还有一些标题......

Request Headers From Upload Stream
Content-Length  125661
Content-Type    multipart/form-data; boundary=---------------------------1944294225892
Run Code Online (Sandbox Code Playgroud)

lai*_*ika 3

实际上,您需要使用此处讨论的requestStream某种多部分解析器来解析,以便剥离标头: