此问题是作为CKEditor论坛的一部分提出的,显然现在托管在stackoverflow上。我将此条目视为论坛问题。我希望它会出现在stackoverflow站点上的正确位置。请告知是否应重定向。
我在ckeditor实例中使用filebrowserImageUploadUrl配置设置。
在Firefox或Chrome中,当我点击“上传”标签查看本地设备上的图片时,选择一个,然后点击“发送到服务器”,ckeditor传输到服务器的值就是文件名和扩展。保存并返回的网址是正确的,一切正常。
在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中,它是上面描述的剥离完整路径名。
关于为什么会出现这种情况的任何想法?是否有已知的过程/协议来检测这种差异并进行处理?
我忘了提到我使用的是ckeditor 4.5.3(截至本文撰写时的最新版本)。 4.5.1(早期开发)的发布也会出现问题。
答案 0 :(得分:1)
ckeditor上传发送到服务器的文件名参数(在Visual Studio 2015中使用各种浏览器用于MVC 5网站)原来只是(1)Firefox中的filename.ext,但是(2)完整和在IE中更正文件名,包括“\”路径分隔符。
所以这不是一个问题。它是浏览器安全设置和/或默认设置的选择。我不确定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时没有更改值。
我希望这种学习对别人有用。抱歉,这是虚假警报。