2009年11月30日 星期一

Servlet can not resolve multipart/form-data type

當我在osgi環境上,想利用servlet方式上傳檔案,會發現無法上傳且回覆錯誤訊息如下。

Log ErrorError handling connection
java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)
    at org.eclipse.equinox.http.servlet.HttpServletRequestImpl.parseRequestLine(HttpServletRequestImpl.java:1264)
    at org.eclipse.equinox.http.servlet.HttpServletRequestImpl.parseHeaders(HttpServletRequestImpl.java:1034)
    at org.eclipse.equinox.http.servlet.HttpServletRequestImpl.<init>(HttpServletRequestImpl.java:77)
    at org.eclipse.equinox.http.HttpListener.handleConnection(HttpListener.java:220)
    at org.eclipse.equinox.http.HttpThread.run(HttpThread.java:159)

發生這個錯誤的原因就是Servlet無法解析multipart型態的上傳,因此我們要針對這做個修改。拜google大神,Oreilly提供了不錯的Multipart處理程式碼。我們只要下載並與專案做連結,而使用語法如下:

public void doGet(HttpServletRequest request,  HttpServletResponse response)
    throws IOException{
                MultipartRequest mr = new MultipartRequest(request , "d:\\", 5*1024*1024);
}

d:\是指儲存的位址,5*1024*1024是檔案大小。如此一來,就可以正確處理上傳文件了。

參考資料:
[1] 解决jsp或serverlet 不能解析multipart/form-data 类型的表单域的问题
[2] com.oreilly.servlet

沒有留言: