ckeditor filebrowserImageUploadUrl 发送在 ie 和 edge 中去掉所有“\”的完整路径

ckeditor filebrowserImageUploadUrl sending full path stripped of all "\" in ie and edge

这个问题是作为 CKEditor 论坛的一部分提出的,显然现在托管在 Whosebug 上。我将此条目视为论坛问题。我希望它会出现在 Whosebug 网站上的正确位置。请告知是否应该重定向。

我在 ckeditor 实例中使用 filebrowserImageUploadUrl 配置设置。

在Firefox或Chrome中,当我点击"Upload"选项卡查看本地设备上的图片时,select一张,点击"Send it to Server,"传来的值ckeditor 发送给服务器的只是文件名和扩展名。 url保存和返回是正确的,一切正常。

在 IE11(及更早版本?)和新的 MS Edge 中,发送到服务器的文件名是去除所有“\”分隔符的完整路径名。因此,例如,名为 "C:\Users\username\Pictures\imagename.jpg" 的 Windows PC 上的文件将作为 "C:UsersusernamePicturesimagename.jpg".

发送

我通过简单地在 ckeditor 对话框回调中返回字符串 "upload.FileName" 来验证这一点,其中 "upload" 是传输事务中的第一个参数,并在服务器上以 C# 声明为 HttpPostedFileWrapper。在 Firefox 和 Chrome 中的返回值是 filename.ext,而在 IE 和 Edge 中,它是上述剥离的完整路径名。

关于为什么会出现这种情况有什么想法吗?是否有已知的 process/protocol 来检测这种差异并进行处理?

我忘了说我正在使用 ckeditor 4.5.3(撰写本文时为最新版本)。该问题也出现在 4.5.1 版本(早期开发)中。

ckeditor上传到服务器的文件名参数(在Visual Studio2015年使用各种浏览器的MVC 5网站)结果是(1)只有Firefox中的filename.ext,但 (2) IE 中完整且正确的文件名,包括“\”路径分隔符。

所以这不是 ckeditor 的问题。相反,它是浏览器安全设置 and/or 默认值中的一个选项。我不确定 IE 默认值是什么(当我直接启动它时,我的 IE 中的完整路径被禁用,但当 IE 用作 Visual Studio 中启动的浏览器时,它被启用)。因此,很明显,如果提供了完整路径,则必须从服务器端的路径中解析出文件名。

这是解决问题的两行 C# MVC 代码(被一些写入的包围)。控制器不假设即将发生的事情。如果仅传输 filename.ext,则最终会成为 ImageName。如果是完整路径,它会将其解析为 filename.ext.

    public ActionResult ControllerName(HttpPostedFileWrapper upload, string CKEditor, string CKEditorFuncNum, string langCode)
    {
        . . .
        System.Diagnostics.Debug.WriteLine(upload.FileName);

        string ImageName = upload.FileName;
        System.Diagnostics.Debug.WriteLine(ImageName);

        ImageName = System.IO.Path.GetFileName(ImageName);
        System.Diagnostics.Debug.WriteLine(ImageName);
        . . .
    }

使用 writeline 代码,我能够确认接收到的值(仅文件名或完整路径)并且解析在需要时有效但在仅传输 filename.ext 时没有更改值。

我希望这次学习对其他人有用。抱歉误报。