1

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

行 ...

因此,我正在尝试按照此处的示例使图像上传正常工作...

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);
    }

问题是……编辑器实际上给了我什么?是整个文件吗?一大块?我似乎无法分辨,因为该对象根本没有类型信息,而且原始帖子信息似乎太少而不能真正成为整个图像文件。

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

编辑:好的多一点挖掘表明,如果我拉出底层的 Request 对象,它有一个 files 属性,显然包含我发布的图像文件。我想我也许可以从这里弄清楚。

在我得到一个代码块的地方,我会把它作为答案发布。

4

2 回答 2

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 } );
    }
于 2013-04-03T20:30:37.853 回答
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);
        }

出人意料地简单对... :)

于 2013-03-28T01:43:21.003 回答