java 上传文件接口_Java接口实现文件上传
大家好,又见面了,我是你们的朋友全栈君。
因工作需要,在后台管理页面加入一个上传文件的模块,虽然接口的代码很简单,但实现期间遇到了一些比较有趣的坑,特记录下来。
需求
实现文件上传,并提供一个可供下载的路径。
想法
文件上传代码暂且不谈,先说说文件放在服务器什么位置比较合适。我首先想到的是两个地方:
tomcat的webapps/ROOT目录下,如果放在这个目录下,数量少了还好,一旦数量多了,必定会影响tomcat本身的运行速度。这个虽然可用但不可行。nginx的静态目录下,放在这个目录下则不会有什么影响。只需要在nginx中进行相应的配置即可。可用也可行。
java代码实现:
由于我们使用的是SSM框架,首先需要配置文件上传解析器。
虽然简单,但依旧遵从三层架构,Controller实现如下:
@Controller
@RequestMapping(“/upload”)
public class UploadApkController {
@Resource
private UploadApkService uploadApkService;
/**
* 上传Apk文件
* @param file
* @return
*/
@RequestMapping(“/uploadApk”)
@ResponseBody
public Map uploadApk(@RequestParam(“file”) CommonsMultipartFile file){
Map resultMap = new HashMap<>();
try {
uploadApkService.uploadApk(file);
resultMap.put(“msg”, “上传成功”);
} catch (IOException e) {
e.printStackTrace();
resultMap.put(“msg”, “上传失败”);
}
return resultMap;
}
}
Service接口:
public interface UploadApkService {
/**
* 上传Apk文件
* @param file
* @throws IOException
*/
public void uploadApk(CommonsMultipartFile file) throws IOException;
}
Service实现类:
public class UploadApkServiceImpl implements UploadApkService {
/**
* 上传Apk文件
* @param file
* @throws IOException
*/
public void uploadApk(CommonsMultipartFile file) throws IOException {
//这是我的nginx静态路径,使用时需改为自己的对应路径
String path=”/data2/fphone/static/apk/”+file.getOriginalFilename();
File newFile=new File(path);
file.transferTo(newFile);
}
}
代码部分完成。
对接口进行测试。
这是之前测试的截图,状态为OK即为上传成功。 下面进行下载测试,输入nginx静态地址,显示如下: 出现问题。思考后认为可能是权限不够,进入nginx静态目录下,执行命令:
ls -all apk
显示如下: 发现zrx.apk权限为640,对于其他人并没有读的权限。我nginx的配置如下: 所以通过nginx并没有读取这个文件的权限。有些人可能会说将nginx的user调整为root,但我建议不要给nginx太大的权限。所以采用另一种方式解决这个问题。
解决权限问题
既然不决定提高nginx的权限,那么只能将上传文件的权限由640改为644。查看tomcat的bin目录下的catalina.sh文件: 将这里的0027改为0022即可,0022代表权限为644。 权限修改完成,再次进行测试,调用接口上传文件,检查文件权限:
发现文件权限为644。继续尝试输入路径进行下载: 文件果然开始正常下载,验证了我们的思路是正确的。到此问题解决。如果有什么不明白或者发现问题的,欢迎评论或者私信我,谢谢各位!
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/146606.html原文链接:https://javaforall.cn
相关文章
- Java文件上传详解
- Java 文件上传 MultipartFile
- java web文件上传——FileUpload
- Java文件上传功能代码 —— 普遍适用
- JAVA数据库连接池_java与数据库的连接怎么实现
- java 上传文件到服务器_ameqp服务器网址
- java简单酒店管理系统_javaweb酒店管理系统
- java 异或加密_Java异或技操作给任意的文件加密原理及使用详解
- Java 文件与 IO【复习备考简单练习 三】
- 【Java 虚拟机原理】Class 字节码二进制文件分析 六 ( 属性类型 | Code 属性 | 属性名称索引 | 属性长度 | 操作数栈最大深度 | 局部变量存储空间 | 字节码长度 )
- 利用Java API通过路径过滤上传多文件至HDFS详解大数据
- 断点续传 Java实现文件断点续传详解编程语言
- java实现文件下载功能代码详解编程语言
- JAVA 实现tail -f 日志文件监控功能详解编程语言
- java上传图片文件和回显详解编程语言
- java http post上传文件详解编程语言
- 删除Linux中的Java程序(linux删除java)
- 构建基于Java和Oracle的强大技术栈(java架构oracle)
- java文件操作练习代码读取某个盘符下的文件
- java使用ftp上传文件示例分享
- java使用计算md5校验码方式比较两个文件是否相同
- java使用smartupload组件实现文件上传的方法