我以前遇到过同样的问题。我通过在用户点击浏览按钮时打开弹出窗口来解决问题,并且此新弹出窗口直接链接到支持文件上载和下载的servlet。 上传文件后,弹出窗口直接由servlet调用window.close()加载servlet主体来关闭。 如下的变化来完成:
在addItem.jsp它会提示用户输入一个文件:
<script type="text/javascript">
...
function newWindow()
{
popupWindow = window.open('addItemImage.jsp','name','width=200,height=200');
}
...
</script>
<f:view>
<h:form id="search" onsubmit="return validateDetails()">
...
<h:panelGroup>
<font color="black">Item Image :</font>
</h:panelGroup>
<h:panelGroup>
<input type="button" value="Upload Image" onClick="newWindow()"/>
</h:panelGroup>
...
</h:form>
</f:view>
在新弹出的窗口已打开: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>
这将张贴到一个servlet,然后将呈现图像并将其保存在一个地方。 FileUploaderServlet.java
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
List<FileItem> 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>");
}
这个servlet在上配置的地方,保存文件将直接关闭先前打开弹出的完成。
所以这样我就可以使用托管bean jsf 1.2并实现上传。 我在stackoverflow上找到了其他方法,但是觉得实现起来有点复杂。
为什么选择投票?评论,而不是倒票和走开¬¬ –
这将是最简单的使用第三方控制或图书馆。由于这不是一个选项,你将不得不开始阅读MIME规范,因为你将要编写一个MIME解析器。 – McDowell
@McDowell是的,我知道这将是waaay更简单,我也做了一个使用lib的版本,它被拒绝:/我目前正在尝试使用servlet来接收文件... –