求:用纯jsp页面上传文件的代码(不用其它组件)?

来源:百度知道 编辑:UC知道 时间:2024/05/17 06:05:00
用html标签的<input type="file" />可以实现吗?我在本机上传文件,没有任何问题,可是远程上传就失败,提示找不到图片。这问题怎么解决。
JSP上的代码是<input type="file" name="picurl" />,(我这里用了struts)后台JAVA代码是//将要保存的路径
String load = request.getSession().getServletContext().getRealPath("/");
//取得上传图片的URL
String url = request.getParameter("url");
//取得一个新的图片的名字(包括.jgp的后缀名)
String fileName = CompanyUtil.getfilename(".jpg");
//IO流拷贝上传图片文件
try {
FileOutputStream fos = new FileOutputStream(load + "images/pic/" + fileName);
FileInputStream fis = new FileInputStream(new File(url));
byte[] b = new byte[256];
int len = 0;
while ((len=fis.read(b)) != -1) {
fos.write(b,0,len);
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
AllException.doException(e, &qu

FileInputStream fis = new FileInputStream(new File(url));
这个InputStream不是这样拿的啊,new File(url) 的意思是读取"url"这个文件,在自己机器上当然可以,远程当然不行了,比如我机器上要传个文件到你的服务器,你new File("D:\\image\\a.jpg");你说能拿到我D盘上的图片吗?
另外:byte[] b = new byte[256]; 假如我的图片有1M,你这个b数组怎么可能装的下呢!!应该正确拿到FileInputStream,然后byte[] b = new byte[fis.available()];

既然你用struts,那就用struts来拿:
<input type="file" name="picurl" />
注意这里:
<form action="picurlupload.do" method="post" enctype="multipart/form-data">//一定要enctype="multipart/form-data"
写个Form:
PicurlForm ,只有一个FormFile类型的属性:private FormFile picurl;生成get、set
写个Action,PicurlUploadAction ,只要在execute方法里调用:
① PicurlForm ff = (PicurlForm)form;
② FormFile picurl = ff.getPicurl();
③ FileOutputStream fos = new FileOutputStream(load + "images/pic/" + fileName);
④ fos.write(picurl.getFileData());
就搞定了!!