Хорошо, Micro$oft или кто-то еще должен что-то с этим сделать, а пока вот результат многочасовой отладки:
В этом решении используется функция прямой загрузки (уже есть в Tinymce, но отключена по умолчанию), и с помощью некоторого хака jquery мы вставляем изображение в текстовую область.
Изменение размеров должно быть сделано после вставки изображения. В последних версиях Tinymce они также добавили несколько хороших инструментов для редактирования изображений, которые также работают с этим методом.
Теперь код:
Это действие, которое необходимо поместить в контроллер: (обратите внимание на маршрутизацию)
public string Upload(HttpPostedFileBase file)
{
string path;
string saveloc = "~/Images/";
string relativeloc = "/Images/";
string filename = file.FileName;
if (file != null && file.ContentLength > 0 && file.IsImage())
{
try
{
path = Path.Combine(HttpContext.Server.MapPath(saveloc), Path.GetFileName(filename));
file.SaveAs(path);
}
catch (Exception e)
{
return "<script>alert('Failed: " + e + "');</script>";
}
}
else
{
return "<script>alert('Failed: Unkown Error. This form only accepts valid images.');</script>";
}
return "<script>top.$('.mce-btn.mce-open').parent().find('.mce-textbox').val('" + relativeloc + filename + "').closest('.mce-window').find('.mce-primary').click();</script>";
}
И это полный код для Tinymce, он сгенерирует текстовое поле и пару скрытых полей. Он также создаст экземпляр tinymce с включенными некоторыми плагинами.
<iframe id="form_target" name="form_target" style="display:none"></iframe>
<form id="my_form" action="/admin" target="form_target" method="post" enctype="multipart/form-data" style="width:0;height:0;overflow:hidden">
<input name="file" type="file" onchange="$('#my_form').submit();this.value='';">
</form>
<script type="text/javascript">
tinymce.init({
selector: "textarea",
theme: "modern",
plugins: [
"advlist autolink lists link image charmap print preview hr anchor pagebreak",
"searchreplace wordcount visualblocks visualchars code fullscreen",
"insertdatetime media nonbreaking save table contextmenu directionality",
"emoticons template paste textcolor colorpicker textpattern imagetools"
],
toolbar1: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image",
toolbar2: "print preview media | forecolor backcolor emoticons | ltr rtl",
image_advtab: true,
templates: [
{title: 'Test template 1', content: 'Test 1'},
{title: 'Test template 2', content: 'Test 2'}
],
file_browser_callback: function(field_name, url, type, win) {
if(type=='image') $('#my_form input').click();
}
});
</script>
<textarea id="my_editor" class="mceEditor">This will be an editor.</textarea>
Вам нужно создать папку с именем "Изображения" в корне вашего проекта для загрузки изображений. Вам также потребуется файл Tinymce js и jquery.
Измените действие формы в соответствии с вашими настройками!!!
Вы также можете использовать помощники html. Мне они не нравятся. но продолжайте и используйте их вместо этой формы ручной работы, если хотите.
Идея взята из здесь, но это было сделано на питоне, поэтому я переписал его для работы с ASP.NET MVC5 и последней версией TinyMCE.
Я продолжу работать над этим в ближайшие несколько дней и при необходимости отредактирую этот ответ.
person
Vahid Amiri
schedule
09.11.2015