java文件上传linux失败,解决Java Web对Linux服务器不能上传文件的难题

本文主要介绍了在Java Web应用中遇到的文件上传到Linux服务器失败的问题。当使用ServletFileUpload处理文件上传时,由于权限限制,文件无法写入指定路径。通过在代码中设置文件可写权限,解决了这个问题。此外,还提供了如何查看Tomcat Linux服务器日志以及远程重启服务的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 Java Web文件上传程序

页面中用html或某个js框架,弹出选择上传文件界面,用户选择文件后上传;传到服务器上调用servlet进行处理,把接受到的内容写入服务器相应目录。Java Web上传都是这个思路,网上有很多例子,就不再多说了。

本项目的servlet主体代码如下:

//上传文件实际保存路径

uploadPath=request.getSession().getServletContext().getRealPath("/dddd");

//uploadPath="/var/lib/tomcat6/webapps/xxxx/dddd/";

if (ServletFileUpload.isMultipartContent(request)) {

try {

DiskFileItemFactory factory = new DiskFileItemFactory();

factory.setSizeThreshold(1024);

factory.setRepository(new File(repositoryPath));//设置临时目录

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setHeaderEncoding("UTF-8");

upload.setSizeMax(1024 * 1024 * 1024);//设置文件大小

List items = upload.parseRequest(request);

for (FileItem item : items) {

if (!item.isFormField()) {// 如果是文件类型

name = item.getName();// 获得文件名

if (name != null) {

File savedFile = new File(uploadPath, name);

item.write(savedFile);

}

}

}

response.getWriter().write("{\"status\":true,\"newName\":\""+name+"\"}");

} catch (FileUploadException e) {

e.printStackTrace();

response.getWriter().write("{\"status\":false}");

} catch (Exception e) {

e.printStackTrace();

}

如果服务器为Windows,一切正常;服务器为Linux则上传失败;

初认为是路径问题,因为Windows和Linux的路径写法不同;不过对于Linux,下面两种写法,一种是从上下文获取路径,一种直接写绝对路径,都不能上传;

uploadPath=request.getSession().getServletContext().getRealPath("/dddd");

//uploadPath="/var/lib/tomcat6/webapps/xxxx/dddd/";

二 用js调试控制台,在chrome下打F12,调出js调试控制台,找到要调试的js或jsp,切到sources选项卡,在源代码中下断点,在这里下断点调试,没发现什么可用信息;

0818b9ca8b590ca3270a3433284dd417.png

三 然后看tomcat控制台输出信息,这个在Linux下不像Windows下有个控制台的面板可看;在linux下进入tomcat的logs目录,打命令tail -f catalina.out可看到tomcat控制台的输出;

0818b9ca8b590ca3270a3433284dd417.png

这个查看会自己刷新,如果要退出查看,打Ctrl+C,返回到linux命令行界面;

通过这个图可以看到错误代码在AddPicOtherServlet.java的57行;

56 File savedFile = new File(uploadPath, name);

57 item.write(savedFile);

就是往磁盘上写文件时出错的;

下图这个是远程连接Linux的工具;

0818b9ca8b590ca3270a3433284dd417.png

四 后来研究了下资料,这个是权限引起的;本身tomcat用root启动,可以对任何目录读写;但Java程序有个限制,Java程序默认只对Java程序自身所在目录有写的权限,对别的目录写文件要在代码里设置一下;

File savedFile = new File(uploadPath, name);

savedFile.setWritable(true,false);

item.write(savedFile);

中间这句就是设置可写权限的;加了这句就可上传了;

五 远程重启Linux服务器上的tomcat服务,用putty工具,按下图进行;

0818b9ca8b590ca3270a3433284dd417.png

最近火气重,解决完问题中午出去吃饭顺便买盒六味地黄丸,吃一颗,降降火;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值