Раньше я сталкивался с той же проблемой. Я решил проблему, открыв всплывающее окно, когда пользователь нажимает кнопку обзора, и это новое всплывающее окно напрямую связано с сервлетом, который поддерживает загрузку и загрузку файлов.
После того, как файл был загружен, всплывающее окно было закрыто непосредственно сервлетом, вызывающим window.close() при загрузке тела сервлета.
ниже приведены сделанные изменения:
В addItem.jsp, который запрашивает пользователя для файла:
<script type="text/javascript">
...
function newWindow()
{
popupWindow = window.open('addItemImage.jsp','name','width=200,height=200');
}
...
</script>
...
Item Image :
<input type="button" value="Upload Image" onClick="newWindow()"/>
...
В открывшемся всплывающем окне: addItemImage.jsp
<script type="text/javascript">
function validate()
{
var file = document.getElementById("file").value;
if(file == null || file == "")
return true;
if(file.indexOf(".jpg") == -1 && file.indexOf(".gif") && file.indexOf(".bmp") == -1 && file.indexOf(".jpeg") == -1)
{
alert("Invalid File Format!! Please upload jpg/bmp/gif");
return false;
}
return true;
}
</script>
<body>
<form enctype="multipart/form-data" method="post" action="FileUploaderServler.view" onsubmit="return validate()">
<input type="file" name="file" id="file" />
<input type="submit" value="Upload Image">
</form>
</body>
Это отправит на сервлет, который затем отобразит изображение и сохранит его в месте.
FileUploaderServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
List items = null;
try
{
MultipartHTTPServletRequest multipartHTTPServletRequest = new MultipartHTTPServletRequest(Connection.getRequest());
items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(multipartHTTPServletRequest);
}
catch (FileUploadException e)
{
e.printStackTrace();
}
if(!Util.isNullList(items))
{
for (FileItem item : items)
{
if (!item.isFormField())
{
String itemName = item.getFieldName();
InputStream filecontent = null;
try
{
filecontent = item.getInputStream();
}
catch (IOException e)
{
e.printStackTrace();
}
/* String currDirPath = System.getProperty("user.dir");//C:\Users\KISHORE\Desktop\eclipse
File file = new File(currDirPath+"\\itemImages");*/
new File(Constants.ABS_FILE_PATH_TO_IMAGES).mkdir();
File fw = new File(Constants.ABS_FILE_PATH_TO_IMAGES+"\\"+Connection.getRequest().getSession().getId()+".jpg");//E:\Kishore Shopping Cart\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\ShoppingCart\WEB-INF\itemImages\EC34EEE58065AD674192D3D57124F07E.jpg
fw.delete();
fw.createNewFile();
try
{
item.write(fw);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
PrintWriter out = response.getWriter();
out.print("<html><title>Add Image to Item</title><body onload='window.close()'>Uploaded Successfully!!</body>");
System.out.print("</html>");
}
Этот сервлет при завершении сохранения файла в сконфигурированном месте непосредственно закрывает всплывающее окно, которое было ранее открыто.
Таким образом, я смог использовать управляемый bean-компонент jsf 1.2 и добиться загрузки фила.
Я нашел другие способы для stackoverflow, но чувствовал, что это было немного сложно реализовать.