struts2 上传文件为什么报找不到文件

java.io.FileNotFoundException:C:\DocumentsandSettings\tangjm\桌面\images\14-003u.jpg(系统... java.io.FileNotFoundException: C:\Documents and Settings\tangjm\桌面\images\14-003u.jpg (系统找不到指定的路径。) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.
(FileInputStream.java:106) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:249) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at

我本地上传文件是可以的,别人调用我的服务上传文件就会抛异常

String imagePath = request.getParameter("imagePath");
File imageFile = new File(imagePath);
FileOutputStream fos = null;
FileInputStream fis = null;
try {
// 建立文件输出流
String realpath = ServletActionContext.getServletContext().getRealPath("/files");
fos = new FileOutputStream(realpath + "/2.jpg");
// 建立文件上传流
fis = new FileInputStream(imageFile);
byte[] buffer = new byte[1024];
int len = 0;
while ((len = fis.read(buffer)) > 0) {
fos.write(buffer, 0, len); } }
catch (Exception e) {
System.out.println("文件上传失败");
e.printStackTrace(); }
finally { close(fos, fis);
}
展开
 我来答
love爱有缘
2013-11-09 · TA获得超过1041个赞
知道小有建树答主
回答量:789
采纳率:0%
帮助的人:684万
展开全部
Struts文件上传可以参考http://www.cnblogs.com/linjiqin/archive/2011/03/21/1990674.html

这个问题是你要明白 java是不能直接操作服务器(本地除外)的磁盘的

File imageFile = new File(imagePath);

 这段代码是在服务器执行的,而服务器上 C:\Documents and Settings\tangjm\桌面\images\14-003u.jpg

 文件找不到   但是如果你在服务器(自己电脑)上时候,这时候你自己电脑是服务器,代码也运行在服务器 说白了就是 客户端和服务器在同一台电脑上,所以是能访问到的


文件上传不能通过普通的 request获取 路径。而是通过专门上传的类进行处理 例如 Struts,Spring,Apache,和 jspsmartupload都提供了文件的上传的功能,同是,作为文件上传的时候,表单必须是multipart-form/data 类型。否则仍旧错误!


不依赖任何框架的文件上传代码如下(依赖Servlet)

//依赖jar  common-io.jar  common-fileupload.jar 
//代码仅供参考!

import java.io.File;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpload {
    public  boolean  upload(String filename, HttpServletRequest request,HttpServletResponse response){
        if(filename ==null || "".equals(filename)) return false ;
        boolean  isMultipart = ServletFileUpload.isMultipartContent(request);
        if(isMultipart){
            DiskFileItemFactory factory = new DiskFileItemFactory();
            //设置缓冲目录
            factory.setRepository(new File(".tmp"));
            //设置文件缓冲的最大值为8k
            factory.setSizeThreshold(8);
            ServletFileUpload upload = new ServletFileUpload(factory);
            //设置文件编码
            upload.setHeaderEncoding("UTF-8");
            //设置文件允许上传的大小4G
            upload.setSizeMax(1024*1024*1024*4);
            String username = "" ;
            try {
                List<FileItem> list = upload.parseRequest(request);
                for(FileItem item : list){
                    if(item.isFormField()){//如果是普通表单属性
                        if("username".equals(item.getFieldName())){
                            username = item.getString();
                        }
                    }else{//如果是文件属性
                        File file = new File(item.getName());
                        file.getParentFile().mkdirs();
                        item.write(file);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }        
        }else{
            System.out.println("表单格式必须为multipart-form/data");
            return false ;
        }
        return true ;
    }
}
lin_chuhao
推荐于2018-03-20 · TA获得超过351个赞
知道小有建树答主
回答量:572
采纳率:57%
帮助的人:129万
展开全部
C:\Documents and Settings\tangjm\桌面\images\14-003u.jpg这条路径是传入的文件是吗 如果是 说明这条路径是你本地的当然可以
你朋友的机子上没有这条路径 当然找不到文件拉
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jeffsui
2013-11-08 · TA获得超过606个赞
知道小有建树答主
回答量:737
采纳率:50%
帮助的人:294万
展开全部
web容器中对于路径都是获取发布项目当前Root下的路径 也就是/跟路径 而非磁盘上任意路径。
ServletActionContext.getServletContext().getRealPath("/files");
获取的是你项目所在的路径。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式