<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=193653&amp;view=findpost&amp;p=1623251</guid>
        <pubDate>Tue, 03 Jul 2007 21:19:42 +0000</pubDate>
        <title>Загрузка файлов на сервер с помощью Java</title>
        <link>https://forum.sources.ru/index.php?showtopic=193653&amp;view=findpost&amp;p=1623251</link>
        <description><![CDATA[wind: Данный пример иллюстрирует возможность загружать файлы на сервер с помощью HTML форм.<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">import javax.servlet.*;</div><div class="code_line">import javax.servlet.http.*;</div><div class="code_line">import java.io.*;</div><div class="code_line">public class UploadServlet extends HttpServlet</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;private static final String CONTENT_TYPE = &quot;text/html; charset=windows-1251&quot;;</div><div class="code_line">&nbsp;&nbsp;private static final int CR = (int)&#39;\r&#39;;</div><div class="code_line">&nbsp;&nbsp;private static final int LF = (int)&#39;\n&#39;;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public void init(ServletConfig config) throws ServletException</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;super.init(config);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public void doGet(HttpServletRequest request, HttpServletResponse response)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;throws ServletException, IOException</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;response.setContentType(CONTENT_TYPE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;PrintWriter out = response.getWriter();</div><div class="code_line">&nbsp;</div><div class="code_line">// HTML форма, отправляемая методом post</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹html›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹head›‹title›UploadServlet‹/title›‹/head›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹body›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹form action=\&quot;UploadServlet\&quot; method=\&quot;post\&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enctype=\&quot;multipart/form-data\&quot;›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹input type=file name=ufile›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹input type=submit value=\&quot;Attach\&quot;›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹/form›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹/body›‹/html›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.close();</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;public void doPost(HttpServletRequest request, HttpServletResponse response)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; throws ServletException, IOException</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;</div><div class="code_line">//Поток, в который будет писаться содержимое (в принципе может быть любой OutputStream)</div><div class="code_line">&nbsp;&nbsp; &nbsp;FileOutputStream fos = new FileOutputStream(&quot;D:\ufile&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;int[] dataSlice = extractData(request);</div><div class="code_line">&nbsp;&nbsp; &nbsp;int i;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(i=0; i &nbsp; &nbsp; fos.write(dataSlice[i]);</div><div class="code_line">&nbsp;&nbsp; &nbsp;fos.flush();</div><div class="code_line">&nbsp;&nbsp; &nbsp;fos.close();</div><div class="code_line">&nbsp;</div><div class="code_line">// HTML форма отправляемая методом post</div><div class="code_line">&nbsp;&nbsp; &nbsp;response.setContentType(CONTENT_TYPE);</div><div class="code_line">&nbsp;&nbsp; &nbsp;PrintWriter out = response.getWriter();</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹html›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹head›‹title›UploadServlet‹/title›‹/head›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹body›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹form action=\&quot;UploadServlet\&quot; method=\&quot;post\&quot;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; enctype=\&quot;multipart/form-data\&quot;›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹input type=file name=ufile›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹input type=submit value=\&quot;Attach\&quot;›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹/form›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.println(&quot;‹/body›‹/html›&quot;);</div><div class="code_line">&nbsp;&nbsp; &nbsp;out.close();</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;private int[] extractData(HttpServletRequest request) throws IOException</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">// Содержимое пришедших байтов их запроса (содержимое приходящего файла)</div><div class="code_line">&nbsp;&nbsp; &nbsp;InputStream is = request.getInputStream();</div><div class="code_line">&nbsp;&nbsp; &nbsp;int[] data = new int[request.getContentLength()];</div><div class="code_line">&nbsp;&nbsp; &nbsp;int bytes;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int counter = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while((bytes=is.read())!=-1)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;data[counter]=bytes;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;counter++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;is.close();</div><div class="code_line">&nbsp;</div><div class="code_line">// Определение индексов срезки</div><div class="code_line">&nbsp;&nbsp; &nbsp;int i;</div><div class="code_line">&nbsp;&nbsp; &nbsp;int beginSliceIndex = 0;</div><div class="code_line">// Конечный индекс срезки - длина границы + доп. символы.</div><div class="code_line">&nbsp;&nbsp; &nbsp;int endSliceIndex = data.length - getBoundary(request).length()-9;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;for(i = 0; i &#60; data.length; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;{</div><div class="code_line">// Начальный индекс срезки: после того как встретятся 2 раза подряд \r\n</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;if(data[i] == CR &amp;&amp; data[i+1] == LF &amp;&amp; data[i+2] == CR &amp;&amp; data[i+3] == LF)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;beginSliceIndex = i+4;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;break;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;int[] dataSlice = new int[endSliceIndex-beginSliceIndex+1];</div><div class="code_line">&nbsp;&nbsp;for(i = beginSliceIndex; i&#60;=endSliceIndex; i++)</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp;dataSlice[i-beginSliceIndex]=data[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp;return dataSlice;</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">// Поиск границы</div><div class="code_line">private String getBoundary(HttpServletRequest request)</div><div class="code_line">&nbsp;&nbsp;{</div><div class="code_line">&nbsp;&nbsp;String cType = request.getContentType();</div><div class="code_line">&nbsp;&nbsp;return cType.substring(cType.indexOf(&quot;boundary=&quot;)+9);</div><div class="code_line">&nbsp;&nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
[Автор - <a class='tag-url' href='http://forum.sources.ru/index.php?showuser=1701' target='_blank'>d_k</a>]]]></description>
        <author>wind</author>
        <category>Java FAQ</category>
      </item>
	
      </channel>
      </rss>
	