linux服务器文件上传的问题

时间:2020-12-09 10:06:39
我现在遇到的问题是 :
我开发的时候在 WIN下开发的
文件上传的功能没有问题 但是上传到服务器上就什么反映也没有
不知道怎么回事?
String TMP_DIR =getServletContext().getRealPath("/")+"jsp/integrate/uploadfile/";
这是我写的路径
不知道对不对 听人家说linux文件路径写法是不一样的??
求教高人
要是有源码就更好了::

12 个解决方案

#1


你打印一下,TMP_DIR

LINUX下的文件分隔符是/,这一点很容易出错。

再一个,查一下,jsp/integrate....前面有没有/

#2


注意一下分隔符的写法
File.separator 表示文件之间的分隔符是跨平台的

#3


学习

#4


ServletActionContext.getRequest().getRealPath("");
看你的目录结构了, 如果 jsp目录在 webroot 下面,  应该getRealPath("/") 不要这个斜杠的.

#5


大多是路径问题,好好检查检查!

#6


没有解决
真的很怪
不知道是不是我用的组件有问题
谁有无组件上传文件的代码吗?

#7


你在Linux下 把 路径打印出来

#8


你是用的哪个上传的组件?

记得当初有个项目也遇到过这个问题。

#9


改用ftp4che-0.6.2.jar这个插件试一下。

#10


String tmpPath = "c:/tmpdir";
String savePath = request.getSession().getServletContext().getRealPath("/")+"uploadfile/"+type+"/"+studentid;
tmpDir = new File(tmpPath);
saveDir = new File(savePath);
if(!tmpDir.isDirectory())
tmpDir.mkdir();
if(!saveDir.isDirectory())
saveDir.mkdir();

BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
if (ServletFileUpload.isMultipartContent(request)) {
DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
dff.setRepository(tmpDir);// 指定上传文件的临时目录
dff.setSizeThreshold(1048756);// 指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象
sfu.setFileSizeMax(1048756);// 指定单个上传文件的最大尺寸
sfu.setSizeMax(1048756);// 指定一次上传多个文件的总尺寸
FileItemIterator fii = sfu.getItemIterator(request);// 解析request 请求,并返回FileItemIterator集合
while (fii.hasNext()) {
FileItemStream fis = fii.next();// 从集合中获得一个文件流
System.out.println(fis.getName());
if (!fis.isFormField() && fis.getName().length() > 0) {// 过滤掉表单中非文件域
String fileName = fis.getName().substring(fis.getName().lastIndexOf("."));// 获得上传文件的文件名
in = new BufferedInputStream(fis.openStream());// 获得文件输入流
out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"/"+type+fileName)));// 获得文件输出流
Streams.copy(in, out, true);// 开始把文件写到你指定的上传文件夹
in.close();
out.close();
}
}
}
}
catch (Exception e) {
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
e.printStackTrace();
fot = false;
}

#11


看着路径没什么问题,楼主可以多贴出一些代码看看,有可能是你用的组件的问题。

#12


你先把分隔符改成File.separator这个,然后再试试。
或者你直接用绝对路径试试。

#1


你打印一下,TMP_DIR

LINUX下的文件分隔符是/,这一点很容易出错。

再一个,查一下,jsp/integrate....前面有没有/

#2


注意一下分隔符的写法
File.separator 表示文件之间的分隔符是跨平台的

#3


学习

#4


ServletActionContext.getRequest().getRealPath("");
看你的目录结构了, 如果 jsp目录在 webroot 下面,  应该getRealPath("/") 不要这个斜杠的.

#5


大多是路径问题,好好检查检查!

#6


没有解决
真的很怪
不知道是不是我用的组件有问题
谁有无组件上传文件的代码吗?

#7


你在Linux下 把 路径打印出来

#8


你是用的哪个上传的组件?

记得当初有个项目也遇到过这个问题。

#9


改用ftp4che-0.6.2.jar这个插件试一下。

#10


String tmpPath = "c:/tmpdir";
String savePath = request.getSession().getServletContext().getRealPath("/")+"uploadfile/"+type+"/"+studentid;
tmpDir = new File(tmpPath);
saveDir = new File(savePath);
if(!tmpDir.isDirectory())
tmpDir.mkdir();
if(!saveDir.isDirectory())
saveDir.mkdir();

BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
if (ServletFileUpload.isMultipartContent(request)) {
DiskFileItemFactory dff = new DiskFileItemFactory();// 创建该对象
dff.setRepository(tmpDir);// 指定上传文件的临时目录
dff.setSizeThreshold(1048756);// 指定在内存中缓存数据大小,单位为byte
ServletFileUpload sfu = new ServletFileUpload(dff);// 创建该对象
sfu.setFileSizeMax(1048756);// 指定单个上传文件的最大尺寸
sfu.setSizeMax(1048756);// 指定一次上传多个文件的总尺寸
FileItemIterator fii = sfu.getItemIterator(request);// 解析request 请求,并返回FileItemIterator集合
while (fii.hasNext()) {
FileItemStream fis = fii.next();// 从集合中获得一个文件流
System.out.println(fis.getName());
if (!fis.isFormField() && fis.getName().length() > 0) {// 过滤掉表单中非文件域
String fileName = fis.getName().substring(fis.getName().lastIndexOf("."));// 获得上传文件的文件名
in = new BufferedInputStream(fis.openStream());// 获得文件输入流
out = new BufferedOutputStream(new FileOutputStream(new File(saveDir+"/"+type+fileName)));// 获得文件输出流
Streams.copy(in, out, true);// 开始把文件写到你指定的上传文件夹
in.close();
out.close();
}
}
}
}
catch (Exception e) {
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
e.printStackTrace();
fot = false;
}

#11


看着路径没什么问题,楼主可以多贴出一些代码看看,有可能是你用的组件的问题。

#12


你先把分隔符改成File.separator这个,然后再试试。
或者你直接用绝对路径试试。