java 上传文件接口_Java接口实现文件上传

java 上传文件接口_Java接口实现文件上传因工作需要,在后台管理页面加入一个上传文件的模块,虽然接口的代码很简单,但实现期间遇到了一些比较有趣的坑,特记录下来。需求实现文件上传,并提供一个可供下载的路径。想法文件上传代码暂且不谈,先说说文件放在服务器什么位置比较合适。我首先想到的是两个地方:tomcat的webapps/ROOT目录下,如果放在这个目录下,数量少了还好,一旦数量多了,必定会影响tomcat本身的运行速度。这个虽然可用但不可…

大家好,又见面了,我是你们的朋友全栈君。

因工作需要,在后台管理页面加入一个上传文件的模块,虽然接口的代码很简单,但实现期间遇到了一些比较有趣的坑,特记录下来。

需求

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

想法

文件上传代码暂且不谈,先说说文件放在服务器什么位置比较合适。我首先想到的是两个地方:

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.net/146606.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 无源汇上下界可行流_有源点和无源点的区别

    无源汇上下界可行流_有源点和无源点的区别给定一个包含 n 个点 m 条边的有向图,每条边都有一个流量下界和流量上界。给定源点 S 和汇点 T,求源点到汇点的最小流。输入格式第一行包含四个整数 n,m,S,T。接下来 m 行,每行包含四个整数 a,b,c,d 表示点 a 和 b 之间存在一条有向边,该边的流量下界为 c,流量上界为 d。点编号从 1 到 n。输出格式输出一个整数表示最小流。如果无解,则输出 No Solution。数据范围1≤n≤50003,1≤m≤125003,1≤a,b≤n,0≤c≤d≤21474836

    2022年8月11日
    4
  • 免费搭建属于自己的域名个性邮箱

    免费搭建属于自己的域名个性邮箱

    2022年2月18日
    59
  • getopt函数[通俗易懂]

    getopt函数[通俗易懂]getopt函数函数说明getopt–解析命令的可选项getopt只是一个简单的解析命令可选项的函数,只能进行简单的格式命令解析,格式如下:对短选项的解析:cmd[-a][-b]对短选项及短选项的参数解析:cmd[-aa_argument][-bb_argument]选项a的参数也是可选的情况解析:cmd[-a[a_argument]]函数原型#include&…

    2022年6月11日
    42
  • int、bigint、smallint 和 tinyint范围「建议收藏」

    int、bigint、smallint 和 tinyint范围「建议收藏」1bytes=8bit,一个字节最多可以代表的数据长度是2的8次方11111111在计算机中也就是  -128到127  1.BIT[M]  位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1  2.TINYINT[(M)][UNSIGNED][ZEROFILL] M默认为4       从0到255的整型数据。存储大小为1

    2022年9月21日
    5
  • goland 2022.01.13 激活码(注册激活)

    (goland 2022.01.13 激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html40…

    2022年4月2日
    205
  • Int8,Int16,Int32,Int64 有什么不同呢?

    Int8,Int16,Int32,Int64 有什么不同呢?文章目录前言什么是计算机存储单元?Int8,Int16,Int32,nt64,后面的数字有什么意义?总结前言Int8,Int16,Int32,Int64有什么区别呢?或者是为什么后面的数字不一样呢?提示:以下是本篇文章正文内容什么是计算机存储单元?先来扫盲一下计算机存储单元,在计算机内部,信息都是釆用二进制的形式进行存储、运算、处理和传输的。信息存储单位有位、字节和字等几种。计算机的基本的存储单元有:位(bit):二进制数中的一个数位,可以是0或者1,是计算机中数据的最小单位。二进.

    2022年8月15日
    14

发表回复

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

关注全栈程序员社区公众号