當我在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