Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.
Внимание! Некоторое время письма не доходят до аккаунтов MAIL RU GROUP, не доходят на все почтовые ящики mail.ru, inbox.ru, bk.ru. Пишите им жалобы, чтобы быстрее восстановили получение писем, регистрируйтесь через яндекс почту и gmail, туда письма с активизацией доходят.

Вернуться   Форум программистов > .NET > ASP.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 01.06.2017, 19:29   #1
dryn-da
Новичок
 
Регистрация: 01.06.2017
Сообщений: 2
Репутация: 10
Вопрос Прикрепить файлы к сообщению в чате

Добрый вечер. Есть форма :
Код HTML:
@using (Ajax.BeginForm("SendDialogMessage", "Messages", null, new AjaxOptions { OnSuccess = "OnSendDialogLoad" }, new { @id = "f_NewMessage", @class = "", @enctype = "multipart/form-data" }))
                {

                    @Html.Hidden("url", Request.Url.OriginalString)
                    @Html.Hidden("hid_Receiver", sId)
                    @Html.Hidden("hid_IsConference", bIsConference)
                    <input type="submit" value="submit" style="display:none;" />
                    @Html.TextArea("ta_NewMessage_Text", new { placeholder = "Введите тест сообщения", onkeydown = "ta_NewMessage_Text_OnKeyDown(event);" })
                    <div id="d_NewMessage_Buttons">
                        <button id="btn_NewMessage_Find" class="hidden btn_min_Find"></button>
                        <input type="submit" id="btn_NewMessage_Send" onclick="btn_NewMessage_Send_OnClick()" value="Отправить" />
                        <button id="btn_NewMessage_Attach" class="hidden btn_min_Attach"></button>
                        <div id="d_upload_menu">
                            <div id="d_file-upload">
                                <label>
                                    <img src="~/Content/images/attach_inMessage.png" width="40" height="40" alt="Выберите файл">
                                    <input type="file" name="uploadFile" id="uploadFile" multiple>
                                </label>
                            </div>
                            <div id="d_dropzone">
                                <div id="d_dropzone_caption">Перетащите файлы сюда</div>
                            </div>
                        </div>

                    </div>
                }
Метод обрабатывающий данные с формы:
Код:

[HttpPost]
        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        public ActionResult SendDialogMessage(FormCollection collection)
        {
            try
            {
                foreach (string file in Request.Files)
                {
                    var upload = Request.Files[file];
                    if (upload != null)
                    {
                        string fileName = System.IO.Path.GetFileName(upload.FileName);
                        Dictionary<string, byte[]> files = new Dictionary<string, byte[]>();
                        byte[] File = new byte[upload.ContentLength];
                        upload.InputStream.Read(File, 0, upload.ContentLength);
                        files.Add(fileName, File);
                        //upload.SaveAs(Server.MapPath("~/" + fileName));
                    }
                }

                var returnAction = CheckCurrentUser();
                if (returnAction != null) return returnAction;

                Guid? SenderId = CurrentUserId;
                ViewBag.CurrentUserId = CurrentUserId;
                if (SenderId == null) return View("_ErrorAuth");

                Users tempUser = new Users();
                Guid ReceiverId;
                bool IsConference = Convert.ToBoolean(collection["hid_IsConference"]);

                if (!Guid.TryParse(collection["hid_Receiver"], out ReceiverId)) { return Error("Ошибка. Неверный идентификатор получателя."); }
                string messText = collection["ta_NewMessage_Text"];
                v_messages MessageInfo;
                byte[] attached = null;
                Guid messageId = Guid.NewGuid();
                Guid messageLogId = Guid.NewGuid();

                using (var chatclient = ChatClientService.CreateChatClient())
                {
                    var err = chatclient.Send((Guid)SenderId, ReceiverId, IsConference, messText, attached, out MessageInfo);
                    //  var err = chatclient.Send((Guid)SenderId, ReceiverId, message, attached, out MessageInfo);
                    if (err != EChatError.Ok || MessageInfo == null) return Error("Ошибка сервиса. Не удалось отправить сообщение.");
                    //  ReturnMessage m = new ReturnMessage(MessageInfo);


                    return View("_Message", MessageInfo);
                }
            }
            catch (Exception e)
            {
                return Error("Ошибка. Не удалось отправить сообщение." + e.Message);
            }
        }

Возникла необходимость добавить файлы к сообщению.
dryn-da вне форума   Ответить с цитированием
Старый 01.06.2017, 19:29   #2
dryn-da
Новичок
 
Регистрация: 01.06.2017
Сообщений: 2
Репутация: 10
По умолчанию

Написал такой js код:
Код:

var data = new FormData();
        var countfile = 0;
        var idFile = 0;
        //удаление выбранного файла
        function DeleteFile(id) {
            var file = "file" + id;
            $("div." + file).remove();
            data.delete(file);
        }
        //перетаскивание файла
        (function () {
            var dropzone = document.getElementById("d_dropzone");
            var dropzone_caption = document.getElementById("d_dropzone_caption");
            dropzone.ondragover = function () {
                return false;
            };

            dropzone.ondragleave = function () {
                return false;
            };

            dropzone.ondrop = function (e) {
                e.preventDefault();
                var files = e.dataTransfer.files;                
                for (var x = 0; x < files.length; x++) {
                    document.getElementById('d_dropzone').innerHTML += '<div class="file' + idFile + '"><p>' + files[x].name + ' (' + files[x].size + '.КБ)</p><label><img onclick="DeleteFile(' + idFile + ')" src="Content/images/delete.png" width="20" height="20" alt="удалить"></label> <b></b></div>';
                    data.append("file" + idFile, files[x]);
                    idFile++;
                }
            };
        })();
        //выбор файла
        $('#uploadFile').on('change', function (e) {
            e.preventDefault();
            var files = document.getElementById('uploadFile').files;
            if (files.length > 0) {
                if (window.FormData !== undefined) {
                    for (var x = 0; x < files.length; x++) {
                        document.getElementById('d_dropzone').innerHTML += '<div class="file' + idFile + '"><p>' + files[x].name + ' (' + files[x].size + '.КБ)</p><label><img onclick="DeleteFile(' + idFile + ')" src="Content/images/delete.png" width="20" height="20" alt="удалить"></label> <b></b></div>';
                        data.append("file" + idFile, files[x]);
                        idFile++;
                    }
                } else {
                    alert("Браузер не поддерживает загрузку файлов HTML5!");
                }
            }
        });
        window.addEventListener("submit", function (e) {
            var form = e.target;
            if (form.getAttribute("enctype") === "multipart/form-data") {
                if (form.dataset.ajax) {
                    e.preventDefault();
                    e.stopImmediatePropagation();
                    var dataForm = new FormData(form);
                    dataForm.delete('uploadFile');
                    for (var key of data.keys()) {
                        dataForm.append(key, data.get(key));
                    }
                    idFile = 0;
                    data = new FormData();
                    document.getElementById('d_dropzone').innerHTML = '<div id="d_dropzone_caption">Перетащите файлы сюда</div>';
                    var xhr = new XMLHttpRequest();
                    xhr.open(form.method, form.action);
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            if (form.dataset.ajaxUpdate) {
                                var updateTarget = document.querySelector(form.dataset.ajaxUpdate);
                                if (updateTarget) {
                                    updateTarget.innerHTML = xhr.responseText;
                                }                                
                            }
                        }
                    };
                    xhr.upload.onerror = function () {
                        alert('Произошла ошибка при загрузке данных на сервер!');
                    }
                    xhr.send(dataForm);
                }
            }
        }, true);

Теперь при отправке сообщения страница не обновляется автоматически (приходится самому обновлять страницу, чтобы увидеть введенное сообщение). До добавления данного js кода все работало нормально. Я предполагаю что проблема в ф-и window.addEventListener("submit", function (e) {...}
Помогите кто знает в чем проблема и как её решить. Заранее благодарен.
dryn-da вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить аттачмент к сообщению в indy IQDDD Работа с сетью в Delphi 1 22.04.2011 20:22
К первому новому сообщению Как сделать , чтобы после ввода ключегого слова в edit программа переходила к gefest58 Общие вопросы Delphi 2 22.10.2010 00:36
Как прикрепить аудио-файлы к БД в Delphi fcfastov2008 БД в Delphi 1 24.03.2009 13:43
Нужно чтобы каждый номер (аси) отправил по 1 сообщению zotox Помощь студентам 1 17.11.2008 20:56


20:34.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru