不多说了!直接贴代码!!
upload(是放在WebRoot下的)
- Java code
public String execute() throws Exception{ //取得需要上传的文件数组 File[] files = getUpload(); //遍历每个需要上传的文件 for (int i = 0; i < files.length; i++) { System.out.println(files[i]); //以服务器的文件保存地址和源文件名建立上传文件输出流 FileOutputStream fos = new FileOutputStream(getSavePath()+"\\"+getUploadFileName()[i]); //以每个需要上传的文件建立输入流 FileInputStream fis = new FileInputStream(files[i]); //将每个需要上传的文件写入 byte[] buffer = new byte[1024]; int length = 0; while ((length=fis.read(buffer))>0) { fos.write(buffer,0,length); } fos.close(); } return SUCCESS; }
- XML code
<package name="mystruts" extends="struts-default"> <action name="upload" class="com.app.action.UploadAction"> <!-- 动态设置Action的savePath属性 --> <param name="savePath">/upload</param> <!-- 配置文件上传的拦截器 --> <interceptor-ref name="fileUpload"> <!-- 配置允许上传的文件类型 --> <param name="allowedTypes">image/png,image/gif,image/jpeg</param> <param name="maximumSize">20480000</param> </interceptor-ref> <!-- 配置系统默认的拦截器 --> <interceptor-ref name="defaultStack"></interceptor-ref> <result name="success">/success.jsp</result> <result name="input">/upload.jsp</result> </action> </package>
个人感觉应该是没有问题的:但是上传的时候就是报如下错误:
java.io.FileNotFoundException: \upload\gyutiu.jpg (系统找不到指定的路径。)
java.io.FileOutputStream.open(Native Method)
java.io.FileOutputStream.<init>(FileOutputStream.java:179)
java.io.FileOutputStream.<init>(FileOutputStream.java:70)
com.app.action.UploadAction.execute(UploadAction.java:64)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
。。。。。。。。。。。。。
求解!!!!!!!!
------解决方案--------------------
路径错了
getSavePath()+"\\"+getUploadFileName()[i] 值应该是部署路径+[自定义目录+]文件名
FileNotFoundException: \upload\gyutiu.jpg 至少应该是个绝对路径
另外你代码没贴全 只能猜了
你的输入流是通过files[i]拿到的 那你得保证Action中有filesFileName和filesContentType两个属性
- Java code
private File[] files; private File[] fileFileName; private File[] fileContentType;//getters && setterspublic String execute() throws Exception { for (int i = 0; i < files.length; i++) { //... String root = ServletActionContext.getRequest().getSession() .getServletContext().getRealPath("/upload"); //加点东西 保证目录: %deployPath%+"/upload" 存在 File destFile = new File(root, fileFileName.get(i)); //... }