問題描述
我有一個 Java 動態 Web 項目,我正在使用 TomCat v7.0.
I have a Java Dynamic Web Project, and I'm using TomCat v7.0.
我是 web 項目的新手,我不太明白如何在我的一個 jsp 頁面中上傳文件.由于我的項目只是本地的,我想我可以使用一個多部分的形式,人們可以在其中選擇文件(這部分很好),然后從我的 Servlet 中檢索文件路徑.我無法完成這部分,它似乎只給了我文件的名稱,而不是它的整個路徑.
I am new to web projects and I didn't quite understand how I can upload a file in one of my jsp pages. Since my project is intended to be only local, I thought I could use a multipart form in which the person would choose the file (and this part goes fine) and later retreive the file path from my Servlet. I can't complete this part though, it appears to only give me the name of the file, not its entire path.
誰能指出我正確的方向?我已經閱讀了幾篇關于 Apache 文件上傳和從多部分表單中檢索信息的文章,但似乎沒有任何幫助.
Can anyone point me to the right direction? I've read several posts about Apache File Upload and retreiving information from the multipart form but nothing seems to help me.
如何從表單中獲取文件路徑,或者如何獲取上傳的文件以在我的 Java 類中使用?
How can I get the file path from a form or alternatively how can I get the uploaded file to use in my Java classes?
提前致謝.
.jsp:
<form method="post" action="upload" enctype="multipart/form-data">
<input type="file" name="filePath" accept="application/vnd.ms-excel, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"></input>
<input type="submit" value="Enviar"></input>
</form>
Java Servlet:
Java Servlet:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
PrintWriter out = response.getWriter();
out.println("<html><body>");
try
{
List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);
for (FileItem item : items)
{
if (item.isFormField())
{
// Process regular form field (input type="text|radio|checkbox|etc", select, etc).
String fieldname = item.getFieldName();
String fieldvalue = item.getString();
out.println("<h1>"+fieldname+" / "+fieldvalue+"</h1>");
}
else
{
// Process form file field (input type="file").
String fieldname = item.getFieldName();
String filename = item.getName();
InputStream filecontent = item.getInputStream();
String s = filecontent.toString();
out.println("<h1>"+s+" / "+filename+"</h1>");
item.write(null);
}
}
}
catch (FileUploadException e)
{
throw new ServletException("Cannot parse multipart request.", e);
}
catch (Exception e)
{
e.printStackTrace();
}
out.println("</body></html>");
}
推薦答案
不提供文件路徑是瀏覽器的一項安全功能.
Not providing the file path is a security feature of the browser.
您的代碼中有可用的文件內容(InputStream filecontent
),因此您可以使用它或使用 FileItem
上的一種便捷方法,例如
You have the file contents available in your code (InputStream filecontent
) so you could use that or use one of the convenience methods on FileItem
, e.g.
item.write(new File("/path/to/myfile.txt"));
這篇關于在 Java Servlet 中上傳文件的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!