Как получить имя файла для - PullRequest
3 голосов
/ 07 апреля 2010

Я хочу прочитать путь к файлу из HTML input type="file" (запись, выбранная пользователем в диалоговом окне файла)

<script>   
    function OpenFileDialog(form) {    
        var a = document.getElementById("inputfile").click();
        SampleForm.filePath.value = //set the path here
        document.SampleForm.submit();   
    } 
</script>

<form name="SampleForm" action="TestServlet" method="get">
    <input type="file" style="display:none;" id="inputfile"/> 
    <a href="javascript:OpenFileDialog(this.form);">Open here</a>
    <input type="hidden" name="filePath" value=""/> 
</form>

Я хочу, чтобы путь к выбранному файлу читался в моем классе сервлетов Как мне получить путь к файлу? Могу ли я прочитать это из var a? Или есть какой-нибудь способ прямого доступа к пути к файлу из input type="file" из моего сервлета?

Ответы [ 2 ]

9 голосов
/ 07 апреля 2010

Во-первых, чтобы устранить распространенное недоразумение: путь к файлу бесполезен на стороне сервера. Представьте, что я являюсь клиентом и даю вам путь к файлу c:/passwords.txt, как вы, будучи сервером, можете получить его содержимое? Используете java.io.File? Нет? Это будет работать только в том случае, если и клиент, и сервер работают на физически . only возможный случай - локальная среда разработки.

Во-вторых, чтобы уточнить ограничение: Javascript не может ничего делать с элементом input type="file" из-за ограничений безопасности. Если бы это было возможно, то можно было бы разработать веб-сайт, который устанавливает загруженный файл на c:/passwords.txt и отправляет форму в течение onload. Это легко и просто собрать все файлы паролей у всех, кто посещает сайт! Нет

В конце концов, вы довольно заинтересованы в файле содержание . Как указано в спецификации HTML-форм , необходимо установить метод запроса на POST и кодировку запроса на multipart/form-data в родительском элементе <form>.

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit">
</form>

Таким образом, файл будет отправлен в теле запроса. Поскольку стандартные версии API сервлетов до версии 2.5 не имеют встроенных средств для анализа mulipart/form-data запросов, вам необходимо проанализировать запрос самостоятельно. Для этого лучше всего использовать Apache Commons FileUpload . Перейдите по ссылке и прочитайте Руководство пользователя и Часто задаваемые вопросы , где приведены примеры кода, советы и рекомендации. Если вы уже используете Servlet 3.0, вы можете просто использовать для этого Servlet API, предоставленный HttpServletRequest#getParts(). Вы можете найти здесь статью с примерами кода об этом .

0 голосов
/ 07 апреля 2010

(взято из http://www.jguru.com/faq/view.jsp?EID=1045507)

Решение A:

  1. Скачать http://www.servlets.com/cos/index.html
  2. Проверка http://www.servlets.com/cos/javadoc/com/oreilly/servlet/MultipartRequest.html - у него есть соответствующий получатель.

Решение B:

  1. скачать http://commons.apache.org/fileupload/
  2. вызвать readHeaders () в org.apache.commons.fileupload.MultipartStream

Решение C:

  1. скачать http://users.boone.net/wbrameld/multipartformdata/
  2. вызвать getParameter on com.bigfoot.bugar.servlet.http.MultipartFormData
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...