Jump to content
  • 0

Проблемы с передачей файла post'ом


itisme
 Share

Question

Доброго времени суток. Только начал осваивать html, возникла проблема с передачей файла через веб-форму. Попытался ее локализовать и представить вам.

 

Имеется html страница с простейшим кодом:

<!DOCTYPE html><html><head><title>Главная страница</title><meta charset="utf-8"></head><body>    <form name="upload"  method="POST" enctype="multipart/form-data"><input type="text" name="filename" /><br><input type="file" name="filecontent" /><br><input type="submit" value="OK" /></form> </body>

Сервлет обрабатывающий страницу получает этот запрос, видит в нем текстовое поле "filename" и введенные в него данные, но совсем не видит поле "filecontent".

 

Судя по отладчику хрома, в отправляемом post-запросе просто отсутствует содержимое файла, хотя по всем прочитанным мной примерам использования input-file'а оно должно там быть. Выглядит это примерно так:

  1. ------WebKitFormBoundaryqbhPyhN96YUAbhF2 Content-Disposition: form-data; name="filename" myfile ------WebKitFormBoundaryqbhPyhN96YUAbhF2 Content-Disposition: form-data; name="filecontent"; filename="test.txt" Content-Type: text/plain ------WebKitFormBoundaryqbhPyhN96YUAbhF2--
  2.  

Остальные браузеры запрос не видят совсем, либо я не разобрался с их отладчиками.

 

Видимо я где-то напортачил в коде страницы, забыв что-то дописать. Прошу подсказать где и что.

 

 

Link to comment
Share on other sites

14 answers to this question

Recommended Posts

  • 0

Да, сервлет - это ява. Но речь не об этом. Повторюсь, запрос доходит куда нужно, "где нужно" видно текстовую переменную, т.к. она передается в запросе, но не видно файла, т.к. его в запросе почему-то не оказывается. Вопрос - почему?

Link to comment
Share on other sites

  • 0

@itisme, Ну в php под инфу с файлами отдельный глобальный массив $_FILES, возможно в яве тоже эти данные разделяются, имя в пост, а путь к tmp файлу и прочее в другом массиве? Я яву совсем не знаю, поэтому не могу сказать наверняка. Но мне кажется есть шанс, что в данном случае реализация в этих двух языках вполне может совпадать.

Link to comment
Share on other sites

  • 0

первая ссылка из гугла: http://javatalks.ru/topics/14948

 

Вот это выглядит примерно как "я не понял проблему, но может ТС просто дурак и не посмотрел первую ссылку гугла?"

 

Я ее смотрел. Я это читал. Причем не раз. Что вы хотели чтобы я там увидел? Параметр "action" у формы? Без него запрос отправляется на свою же страницу, где его поджидает мой сервлет. И он запрос принимает. И обрабатывает данные, которые там есть. Речь о том, чего там почему-то нет.

 

А еще я там увидел сформированный post-запрос:

-----------------------------74482520013458Content-Disposition: form-data; name="description"qwerty-----------------------------74482520013458Content-Disposition: form-data; name="data"; filename="data.txt"Content-Type: text/plainI"a`?o'n~A'a*e"a*a*o` i"a`?o'n~ i^a"e`i'i^e^e`e'A^ o`o'i`a`i'a* i`i^?y" a~i^e"o'a'i^i`!...?o`i^ e`u`a*o` i^i' a^ n~o`?a`i'a* a"a`e"a*e^i^e'??o`i^ e^e`i'o'e" i^i' a^ e^?a`? ?i^a"i'i^i`?...E`a~?a`?o` a^i^e"i'u^ - a^a*o`a*? n~a^e`u`a*o`,E` i`a`?o`a` a~i'a*o`n~y" e` n~e^?u^i"e`o`...O'a^u^, - i^i' n~?a`n~o`e`y" i'a* e`u`a*o`E` i'a* i^o` n~?a`n~o`e`y" a'a*?e`o`!I"i^a" i'e`i` n~o`?o'y" n~a^a*o`e"a*e' e"a`c,o'?e`,I'a`a" i'e`i` e"o'? n~i^e"i'o"a` c,i^e"i^o`i^e'...A` i^i', i`y"o`a*?i'u^e', i"?i^n~e`o` a'o'?e`,E^a`e^ a'o'a"o`i^ a^ a'o'?y"o~ a*n~o`u" i"i^e^i^e'!-----------------------------74482520013458--

Как мне кажется, он несколько отличается от моего результата. И нет, я не пытаюсь отправить пустой файл. Зачем вы мне кидаете что-то про яву, когда я изначально обозначил, что проблема в формировании post-запроса, что никоим образом не зависит от того кто и как этот запрос дальше будет обрабатывать?

 

То же самое касательно php. Как там данные представляются - вопрос десятый, поступают-то они туда с веб-страниц точно такими же типовыми запросами, разве нет?

Link to comment
Share on other sites

  • 0

пффф..., просто нет слов (

вам хоть как-то, чем-то тут пытаются помочь, включают телепатические способности, а вы еще и кабенитесь.

согласен, спецов по яве тут мало, а то может и нет вовсе, но отношение - вот в чем корень!

решайте тогда проблемы сами, раз не способны адекватно принимать любую помощь.

  • Like 2
Link to comment
Share on other sites

  • 0

ерундой не занимайтесь)) ну не смогли вы отправить аяксом - потом сможете.   на моей памяти есть три простых способа - через iframe,  fileUpload(в ссылке RUSa есть) и jQuery.form. а аяксом потом научитесь

 

UPD - dropzona ещё. но она не для начинающих, но прикольна

Link to comment
Share on other sites

  • 0

@infidel, А по вашему обычные формы отправлять обычным способом? :) флаг в руки.  сорри конечно но век таких форм ушел. причем давно. Гораздо симпатичнее отправлять формы без перезагрузки страницы

Link to comment
Share on other sites

  • 0

@Николя223, Вопрос симпатичности тут и не стоит. У него данные не из формы не видны на сервере, а вы предлагаете аякс использовать, чтобы отлаживать проблему стало посложнее.

Link to comment
Share on other sites

  • 0

Темой значит ошибся. действительно, про аякс не слова. недавно кто то тему про аякс постил, перепутал темы )) 

только щас врубился что разговор за java идет ... ничё се :rofl:

Link to comment
Share on other sites

  • 0

Если разбирать тему, то 

 

 

Как мне кажется, он несколько отличается от моего результата. И нет, я не пытаюсь отправить пустой файл. Зачем вы мне кидаете что-то про яву, когда я изначально обозначил, что проблема в формировании post-запроса, что никоим образом не зависит от того кто и как этот запрос дальше будет обрабатывать?

Мне кажется, что  ваша ОС не отличается от других.. и браузеры у вас не секретной разработки стоят и отправляют  они правильные пост запросы...
дело в приеме, а уж никак не в браузере.  Чтобы убедится предлагаю простой способ - поднять например апач, и проверить - это и докажет что дело в приеме, а не в передаче. 

Было бы у меня время, я бы с удовольствием написал что нибудь тестовое на яве, ну а так все в ваших руках - слишком глубоко копаете
 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Similar Content

    • By Xandr555
      Добрый вечер! Подскажите.. Не работает форма, заполнил поля php mail, некоторые синтаксисы не знаю. Код ниже. Скрипт пробовал в хеде и в выложенной вариации, не идет сообщение. Заранее спасибо.
      <!DOCTYPE html> <html> <head> <title>index.html</title> <meta charset="utf-8"/> </head> <body> <form class="form-horizontal" target="_blank" method="post" id="form" enctype="multipart/form-data"> <div class="form-group"> <label class="col-sm-2 control-label">Ф.И.О.:</label> <div class="col-sm-10"> <input class="form-control" type="text" name="name" placeholder="Имя" required /> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Телефон:</label> <div class="col-sm-10"> <input class="form-control" type="text" name="number" pattern="^[0-9]{11}$" placeholder="Телефон" required /> </div> </div> <div class="form-group"> <label class="col-sm-2 control-label">Эл. почта:</label> <div class="col-sm-10"> <input class="form-control" type="email" name="email" placeholder="E-mail" required /> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <textarea class="form-control" rows="3" name="message" placeholder="Ваше сообщение" required></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button class="btn btn-default">Отправить</button> <label class="sucsses">СООБЩЕНИЕ ОТПРАВЛЕНО</label> </div> </div> </form> <script> $("#form").submit(function() { $.ajax({ type: "POST", url: "http://mysite.ru/mail9.php", data: $(this).serialize() }).done(function() { $(this).find("input").val(""); $(".sucsses").fadeIn("1500"); setTimeout(function() { $(".sucsses").fadeOut("1500"); }, 2500); $("#form").trigger("reset"); }); return false; }); </script> </body> </html> <!DOCTYPE html> <html> <head> <title>mail9</title> <meta charset="utf-8"/> </head> <body> <?php $recepient = "mymail@mail.ru"; $name = trim($_POST["name"]); $number = trim($_POST["number"]); $email = trim($_POST["email"]); $message = trim($_POST["message"]); $message = "Имя: $name \nТелефон: $number \nЕmail: $email \nСообщение: $message"; $headers = 'Content-type: text/plain; charset="utf-8"'; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "From: mymail@mail.ru\r\n"; $headers .= "Reply-To: mymail@mail.ru\r\n"; $pagetitle = "Сообщение с АЛЬЯНС-сайта"; mail($recepient, $pagetitle, $message, $headers); ?> </body> </html>  
    • By Seregka174
      Здравствуйте о виликие гуру помогите навичку существуют такая форма отправки:
      <div class="contact-form-wrapper"> <form action="contact/mail.php" method="post" id="contact-form"> <div class="row"> <div class="col-sm-6"> <div class="form-group"> <input type="text" id="contact-name" name="contact-name" placeholder="Имя*" required /> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input type="email" id="contact-email" name="contact-email" placeholder="Email*" required /> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input type="tel" id="contact-phone" name="contact-phone" placeholder="Телефон" /> </div> </div> <div class="col-sm-6"> <div class="form-group"> <input type="text" id="contact-subject" name="contact-subject" placeholder="Тема" /> </div> </div> <div class="col-sm-12"> <div class="form-group"> <textarea name="contact-message" id="contact-message" placeholder="Сообщение*" required rows="7"></textarea> </div> </div> </div> <div class="form-group"> <button type="submit" class="button border red">Отправить</button> </div> <div id="contact-loading" class="alert alert-info form-alert"> <span class="icon"><i class="fa fa-info"></i></span> <span class="message">Loading...</span> </div> <div id="contact-success" class="alert alert-success form-alert"> <span class="icon"><i class="fa fa-check"></i></span> <span class="message">Success!</span> </div> <div id="contact-error" class="alert alert-danger form-alert"> <span class="icon"><i class="fa fa-times"></i></span> <span class="message">Error!</span> </div> </form> </div> <!-- end .contact-form-wrapper --> Вот скрипт contact-form
      /*========== Contact Form ==========*/ $('#contact-form').on('submit', function() { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-loading').fadeIn(); if (validateEmail($('#contact-email').val()) && $('#contact-email').val().length !== 0 && $('#contact-name').val().length !== 0 && $('#contact-message').val().length !== 0) { var action = $(this).attr('action'); $.ajax({ type: "POST", url : action, data: { contact_name: $('#contact-name').val(), contact_email: $('#contact-email').val(), contact_phone: $('#contact-phone').val(), contact_subject: $('#contact-subject').val(), contact_message: $('#contact-message').val() }, success: function() { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-success .message').html('Отправлено!'); $('#contact-success').fadeIn(); }, error: function() { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-error .message').html('Простите, ошибка отправки!.'); $('#contact-error').fadeIn(); } }); } else if (!validateEmail($('#contact-email').val()) && $('#contact-email').val().length !== 0 && $('#contact-name').val().length !== 0 && $('#contact-message').val().length !== 0) { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-error .message').html('Пожалуйста введите корректный email.'); $('#contact-error').fadeIn(); } else { $('#contact-error').fadeOut(); $('#contact-success').fadeOut(); $('#contact-loading').fadeOut(); $('#contact-error .message').html('Please fill out all the fields.'); $('#contact-error').fadeIn(); } return false; }); Помогите написать mail.php что бы форма и письма корректно отправлялись я в этом нифига не понимаю но очень хочется что бы на моем первом сайте заработало, очень прошу Вашей помощи!
    • By Alexys
      Запрос данных с сервера с использованием JQuery-Аякс запроса (ajax) Код на js следующий:jQuery.ajax({            type: "POST",            url: Url.Action("GetMyList", "ServerController"),            contentType: "application/json; charset=utf-8",            dataType: "json",            data: JSON.stringify({}),            success: function(data){},            error: function(data){}});На серверной стороне:
      1. Если метод без параметра, то:
      public class ServerController : Controller{[HttpPost]public NJsonResult GetReportPeriodList(){try{var list = MySqlAdapter.GetList();return new NJsonResult { Data = list };}catch (Exception e){return new NJsonResult{Data = new{error = true,msg = "Ошибка получения списка."}};}}}Возникает ошибка в IE (10 версия), в консоли (в дебаггере js (в метод error: function(data){}) возвращается структура, и в одном поле просто "error"): SCRIPT7002: XMLHttpRequest: Network Error 0x2efe, Could not complete the operation due to error 00002efe.Хром отрабатывает успешно!В итоге нет результата! 
      2. Если же в метод добавим параметр:
      public class ServerController : Controller{[HttpPost]public NJsonResult GetReportPeriodList(string code){try{var list = MySqlAdapter.GetList();return new NJsonResult { Data = list };}catch (Exception e){return new NJsonResult{Data = new{error = true,msg = "Ошибка получения списка."}};}}}То Всё проходит в IE успешно!!! Как так?
       
      Подскажите как быть? Как использовать методы без параметров. Получить просто какое-либо значение, массив объектов, данные.
       
       
       
        
       
    • By horprogs
      Всем привет!
      Реализовал отправку файлов через phpmailer. Все работает. Хотел сделать это без перезагрузки страницы. Узнал, что для отправки файлов нужно использовать FormData. Замечательно. Нашел статью как все настроить, но не работает! Можно сказать все точь-в-точь как в примере, только у меня все равно переходит на страницу php, указанную в action.
      Может быть кто-то сталкивался и знает в чем может быть дело?
       
      Руководствовался: http://positron-it.ru/stati/otpravlenie_soobwenij_s_vlozheniem_po_ajax/
      Правда по всему видимому автор в примере забыл указать action в форме. 
    • By kotahinus
      Столкнулся с такой проблемой, форма на отрез отказыется принимать кириллицу.
      Пробовал через post и get причем через get я получаю в адресной строке вполне адекватный запрос a-la
      qwerty.ru/?name=русскийText
      А когда стараюсь вынуть из переменной ее значение получаю только Text. Кириличесские символы не превращаются в крокозябру, а просто отсутствуют в переменных. Сайт на джумле. Код банальный и рутинный. 
      <form method="get"> Фамилия<br><input type="text" name="lname" required><br> Имя<br><input type="text" name="name" required><br> Телефон<br><input type="text" name="phone" required><br> <input type="submit"></form>В чем может быть проблема?
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy