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);
} 展开
(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);
} 展开
展开全部
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 ;
}
}
展开全部
C:\Documents and Settings\tangjm\桌面\images\14-003u.jpg这条路径是传入的文件是吗 如果是 说明这条路径是你本地的当然可以
你朋友的机子上没有这条路径 当然找不到文件拉
你朋友的机子上没有这条路径 当然找不到文件拉
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
web容器中对于路径都是获取发布项目当前Root下的路径 也就是/跟路径 而非磁盘上任意路径。
ServletActionContext.getServletContext().getRealPath("/files");
获取的是你项目所在的路径。
ServletActionContext.getServletContext().getRealPath("/files");
获取的是你项目所在的路径。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询