浏览器上传文件到服务器端

飞天苹果 发布于 2013/01/22 11:39
阅读 1K+
收藏 1

我想实现从浏览器上传文件到服务器端的功能,页面代码如下:


<body>
 <form action="" method="post" enctype="multipart/form-data">
  <input type="file" name="file"/>
  <input type="submit" value="submit">
 </form>
</body>

服务器端我写了file的getter和setter却得不到,然后又用ServletActionContext(request)获取request发现request里没有提交的参数!

请问各位高手,从浏览器上传文件到服务器端应该怎么做啊

 

加载中
0
JavaOlder
JavaOlder
附上一段示例代码~
//form提交采用multipart/form-data,无法采用req.getParameter()取得数据
		//String itemNo = req.getParameter("itemNo");
		//System.out.println("itemNo======" + itemNo);
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// maximum size that will be stored in memory
		factory.setSizeThreshold(4096);
		// the location for saving data that is larger than getSizeThreshold()
		factory.setRepository(tempPath);

		ServletFileUpload upload = new ServletFileUpload(factory);
		// maximum size before a FileUploadException will be thrown
		upload.setSizeMax(1000000 * 20);
		try {
			List fileItems = upload.parseRequest(req);
			String itemNo = "";
			for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
				FileItem item = (FileItem) iter.next();
				
				//是普通的表单输入域
				if(item.isFormField()) {
					if ("itemNo".equals(item.getFieldName())) {
						itemNo = item.getString();
					}
				}
				//是否为input="type"输入域
				if (!item.isFormField()) {
					String fileName = item.getName();
					long size = item.getSize();
					if ((fileName == null || fileName.equals("")) && size == 0) {
						continue;
					}
					//截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG
					fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());
					item.write(new File(uploadPath, fileName));
					itemManager.uploadItemImage(itemNo, fileName);
				}
			}
			res.sendRedirect(req.getContextPath() + "/servlet/item/SearchItemServlet");
		} catch (Exception e) {
			e.printStackTrace();
			throw new ApplicationException("上传失败!");
		}
	}
0
纵使有花兼明月何堪无酒亦无人
纵使有花兼明月何堪无酒亦无人
一个是查看自己哪里写错了,还有网站的有插件的。很好用
0
飞天苹果
飞天苹果

引用来自“XAVIERYang”的答案

一个是查看自己哪里写错了,还有网站的有插件的。很好用
谢谢
0
JavaOlder
JavaOlder
兄弟 ,你在request.getparameter()是取不不到值的。 可以选择用apache 的

Common-fileupload

文件上传组件!
0
飞天苹果
飞天苹果

引用来自“JavaNewPer”的答案

附上一段示例代码~
//form提交采用multipart/form-data,无法采用req.getParameter()取得数据
		//String itemNo = req.getParameter("itemNo");
		//System.out.println("itemNo======" + itemNo);
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// maximum size that will be stored in memory
		factory.setSizeThreshold(4096);
		// the location for saving data that is larger than getSizeThreshold()
		factory.setRepository(tempPath);

		ServletFileUpload upload = new ServletFileUpload(factory);
		// maximum size before a FileUploadException will be thrown
		upload.setSizeMax(1000000 * 20);
		try {
			List fileItems = upload.parseRequest(req);
			String itemNo = "";
			for (Iterator iter = fileItems.iterator(); iter.hasNext();) {
				FileItem item = (FileItem) iter.next();
				
				//是普通的表单输入域
				if(item.isFormField()) {
					if ("itemNo".equals(item.getFieldName())) {
						itemNo = item.getString();
					}
				}
				//是否为input="type"输入域
				if (!item.isFormField()) {
					String fileName = item.getName();
					long size = item.getSize();
					if ((fileName == null || fileName.equals("")) && size == 0) {
						continue;
					}
					//截取字符串 如:C:\WINDOWS\Debug\PASSWD.LOG
					fileName = fileName.substring(fileName.lastIndexOf("\\") + 1, fileName.length());
					item.write(new File(uploadPath, fileName));
					itemManager.uploadItemImage(itemNo, fileName);
				}
			}
			res.sendRedirect(req.getContextPath() + "/servlet/item/SearchItemServlet");
		} catch (Exception e) {
			e.printStackTrace();
			throw new ApplicationException("上传失败!");
		}
	}
谢谢这位老哥的帮助,我终于弄出来了!但是问题也有了!上传文件的action是不是必须是一个单独的action类啊,我一开始是写到另一个action下作为一个处理事件的方法里的!结果,方法能运行,就是找不到上传文件的信息!当我把这部分拷贝出去单独配置了一个action就完全没有问题了!真纠结!
JavaOlder
JavaOlder
回复 @飞天苹果 : 谢谢,服务器不太好。你可以关注我一下。希望能给你带来学习上的帮助!
飞天苹果
飞天苹果
回复 @JavaNewPer : 但是感觉没有错,就是出不来效果,而且还不知道哪的问题就感觉特别不舒服!我这人有点钻牛角尖了!对了!你的旅游网站的挺好,就是不知道为什么加载挺慢!已经投了一票
JavaOlder
JavaOlder
回复 @飞天苹果 : 不影响的
飞天苹果
飞天苹果
回复 @JavaNewPer : 我只是还是想不通当在一个action下写一个处理方法,然后也是通过form表单提交的,结果在action里却找不到上传文件的值,在这个action里虽然有其他的处理方法但是他们之间应该是相互不影响的啊!提交的时候请求路径是指定到方法的!但是,单独写一个action就没有问题!搞不懂
JavaOlder
JavaOlder
回复 @飞天苹果 : 可以和其他表单一起处理的。你哪里不太清楚?
下一页
0
飞天苹果
飞天苹果

我用的就是struts2 的那个FileUpload

返回顶部
顶部