java实现文件上传的三种方式(java 上传文件接口_Java接口实现文件上传)

为了工作,在后台管理页面中加入了上传文件的模块,接口的代码很简单,但在实现中遇到了有趣的漏洞。 特别记录。

需求

实现文件上传,提供可下载的路径。

创意

暂且不谈上传文件的代码,请告诉我把文件放在服务器的哪里比较合适。 我首先想到的是两个地方:

放在tomcat的webapps/ROOT目录下,放在这个目录下,数量少也没关系。 数量越多,总是会影响tomcat本身的运行速度。 这个可以用,但不能实行。 放在nginx静态目录下,放在此目录下没有任何影响。 在nginx上进行适当的构成即可。 可以使用。

java代码实现:

因为使用的是SSM框架,所以首先需要配置文件上传解析器。

虽然很简单,但它符合三层体系结构,Controller实现如下:

@Controller

@请求映射(/upload ) )。

publicclassuploadapkcontroller {

@Resource

私有代理服务;

//*

上传Apk文件

* @param file

* @return

*/

@请求映射(/upload apk ) )。

@响应主体

publicmapuploadapk (@ request param (file ) ) CommonsMultipartFile file ) {

Map resultMap=new HashMap (;

try {

uploadapkservice.upload apk (文件;

resultmap.put(‘msg ‘,’上传成功’);

}catch(ioexceptione ) {

e .打印堆栈跟踪(;

resultmap.put(‘msg ‘,’上传失败’);

}

返回结果映射;

}

}

服务接口:

publicinterfaceuploadapkservice {

//*

上传Apk文件

* @param file

* @throws IOException

*/

公共多参数文件(publicvoiduploadapk ) throws IOException;

}

服务实现类:

publicclassuploadapkserviceimplimplementsuploadapkservice {

//*

上传Apk文件

* @param file

* @throws IOException

*/

公共多参数文件(publicvoiduploadapk ) throws IOException { )。

//这是我的nginx静态路径,使用时需要更改为自己对应的路径

string path=’/data2/f phone/static/apk/’ file.getoriginalfilename (;

filenew file=new file (路径;

file.Transferto(newfile );

}

}

代码部分完成。

测试接口。

这是上一个测试的屏幕截图,如果状态为OK,则上传成功。 进行下载测试并输入nginx静态地址后,显示如下。 发生了问题。 考虑后,觉得权限可能不够,进入nginx静态目录下运行命令:

ls -all apk

显示如下。 发现zrx.apk权限为640,其他人无权阅读。 我的nginx配置如下。 因此,您没有权限通过nginx读取此文件。 虽然有些人可能会说要将nginx用户调整为root,但我建议不要授予nginx太多权限。 所以用别的方法解决这个问题。

解决权限问题

既然不决定提高nginx的权限,就只能将上传文件的权限从640更改为644。 检查tomcat的dbdjd目录中的catalina.sh文件。 把这里的0027改成0022就可以了。 0022表示644个权限。 权限修改完成,再次进行测试,调用接口上传文件,检查文件权限。

发现文件权限为644。 尝试输入路径继续下载。 文件还是开始正常下载,验证了我们的想法是正确的。 直到这个问题解决为止。 如果有什么不明白或发现问题,欢迎评论或私信。 非常感谢。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注