使用redactor将图像上传到MVC

时间:2013-03-28 00:33:29

标签: asp.net-mvc-3 http-post image-uploading redactor

这可能有点太具体了,我可能需要联系redactor支持,但我在这里看到了关于redactor的其他问题所以我想我会试一试......

好的......

所以我试图按照这里的例子让图像上传工作......

http://imperavi.com/redactor/docs/images/

我的客户端代码......

        $("textarea").redactor({
            focus: true,
            imageUpload: '/MyController/UploadImage'
        });

我的MVC控制器动作看起来像这样......

    public JsonResult UploadImage(object image)
    {
        // Do something with whatever that was i got from redactor
        var result = new { filelink = "" };
        return Json(result);
    }

问题是...... redactor实际给了我什么? 它是整个文件吗?一大块?我似乎无法分辨,因为对象根本没有类型信息,原始帖子信息似乎太少,实际上不是整个图像文件。

有没有人有过这方面的经验/以前真的做过吗? 我真的不想在我的服务器上为这个1功能设置php。

编辑: 好一点挖掘揭示,如果我拉基础的Request对象,它有一个文件属性,显然包含我发布的图像文件。 我想我可以从这里弄明白。

在我获得代码块的地方,我会将其作为答案发布。

2 个答案:

答案 0 :(得分:1)

您正在接收HttpPostedFileBase对象。这是我的实施:

jQuery的:

$('#blog-post').redactor(
    {
    imageUpload: '/blog/images/',
    imageGetJson: '/images/locations/blogs/'
});

然后在控制器中:

    public ActionResult Images(HttpPostedFileBase file)
    {
        // Verify that the user selected a file
        if( file != null && file.ContentLength > 0 )
        {
            // extract only the fielname
            var fileName = Path.GetFileName( file.FileName );
            // store the file
            var path = Path.Combine( ImageLocation.BlogPicturePath, fileName );

            file.SaveAs( path );
        }
        return Json( new { filelink = ImageLocation.BlogPictureUrl + "/" + file.FileName } );
    }

答案 1 :(得分:0)

好吧嗯...我想我在那里...... 这需要一些清理,我不希望你们了解我的自定义DMS代码的引擎盖下发生了什么,但只是假设它接受流并返回一个FileInfo对象,理论上这也适用于你。 ..

        public ActionResult Upload()
        {
            // this object is specific to my system but all it does is 
            // stream the file to a path on the server (code not needed for this Q)
            var dmsService = _kernel.Get<IDMSFileSystemService>();

            List<FileInfo> savedFiles = new List<FileInfo>();

            for (int i = 0; i < Request.Files.Count; i++)
            {
                var file = Request.Files[i];
                using (file.InputStream)
                {
                    savedFiles.Add(dmsService.AddFromStream(file.InputStream, file.FileName);
                }
            }
            var result = savedFiles.Select(f => new { filelink = f.Path}).ToArray();
            return Json(result);
        }

令人惊讶的简单权利......:)