使用异步过程上传多个图像

时间:2016-03-18 08:01:15

标签: c# jquery ajax asp.net-mvc multithreading

我试图从ajax请求上传图片。在行动中,我必须为该图像保存4种不同的尺寸。

我想在当前线程中仅保存一个,并在另一个线程中保留3个图像图像,这样用户就不必等待上传所有图像,因为我只需要第一个图像的路径。

这是我到目前为止所做的。

[HttpPost]
public JsonResult UploadImage(bool isUploadLogo = false)
{
        HttpPostedFileBase file = Request.Files["UploadedImage"];
        if (file != null)
        {
           var getExt = Path.GetExtension(file.FileName).ToLower();
           var getBytesArray = ResizeImage.ConvertToByte(file);
            string fileName = "TestImage" + DateTime.Now.Ticks.ToString() + getExt;
            var smallSizeImageBytes = ResizeImage.ResizeImageBytes(200, 200, getBytesArray, getImageFormat);
            var pic = ImageStore.UploadImage(fileName, file.ContentType, smallSizeImageBytes);

            //Save Slider Image,  Without Wait
            if (!isUploadLogo)
            {
                new Thread(() =>
                {
                    UploadSliderImage(getBytesArray);
                }).Start();
            }
            var result = new
            {
                url = "Folder Path Here" + fileName,        
                isSuccess = "true"
            };
            return Json(result, "text/plain", JsonRequestBehavior.AllowGet);
        }
}

public void UploadSliderImage(byte[] CroppedImage)
{
    //Code for upload diffrent size images
}

虽然我在另一个帖子中调用 UploadSliderImage 但是在客户端我没有得到结果,直到 UploadSliderImage 处理完成。

如何在不等待上传剩余图像的情况下将数据返回给客户端。

1 个答案:

答案 0 :(得分:0)

我认为假设您使用.net 4.0及更高版本,最好使用Task而不是Thread类。以下是您可以基于的示例代码。它将立即返回Json而不完成任务。

        Debug.WriteLine("Image Upload");

        Task tsk = new Task(() =>
        {
            Thread.Sleep(5000); //This is your UploadSlider Image
            Debug.WriteLine("Done");

        });
        tsk.Start();

        return Json("result", JsonRequestBehavior.AllowGet);