springboot 上传文件解析入库_SpringBoot实现文件上传-程序员宅基地

技术标签: springboot 上传文件解析入库  

用SpringBoot实现服务器,然后用 java 和 html5 实现客户端进行上传测试。

一、服务器端接口程序。为省事就在 controller 中写了,正式的程序我喜欢放在 service 这一层进行处理调用。

@RestController

@RequestMapping(“/file”)

public class FileController {

/**

* 单文件上传

*

* @param file

* @param request

* @return

*/

@PostMapping(“/upload”)

@ResponseBody

public String upload(@RequestParam(“file”) MultipartFile file, HttpServletRequest request) {

if (!file.isEmpty()) {

String saveFileName = file.getOriginalFilename();

File saveFile = new File(request.getSession().getServletContext().getRealPath(“/upload/”) + saveFileName);

if (!saveFile.getParentFile().exists()) {

saveFile.getParentFile().mkdirs();

}

try {

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(saveFile));

out.write(file.getBytes());

out.flush();

out.close();

return ResultUtils.buildResult(saveFile.getName() + ” 上传成功”);

} catch (FileNotFoundException e) {

e.printStackTrace();

return ResultUtils.buildResult(“上传失败,” + e.getMessage());

} catch (IOException e) {

e.printStackTrace();

return ResultUtils.buildResult(“上传失败,” + e.getMessage());

}

} else {

return ResultUtils.buildResult(“上传失败,因为文件为空.”);

}

}

/**

* 多文件上传

*

* @param request

* @return

*/

@PostMapping("/uploadFiles")

@ResponseBody

public String uploadFiles(HttpServletRequest request) throws IOException {

File savePath = new File(request.getSession().getServletContext().getRealPath("/upload/"));

if (!savePath.exists()) {

savePath.mkdirs();

}

List files = ((MultipartHttpServletRequest) request).getFiles("file");

MultipartFile file = null;

BufferedOutputStream stream = null;

for (int i = 0; i < files.size(); ++i) {

file = files.get(i);

if (!file.isEmpty()) {

try {

byte[] bytes = file.getBytes();

File saveFile = new File(savePath, file.getOriginalFilename());

stream = new BufferedOutputStream(new FileOutputStream(saveFile));

stream.write(bytes);

stream.close();

} catch (Exception e) {

if (stream != null) {

stream.close();

stream = null;

}

return "第 " + i + " 个文件上传有错误" + e.getMessage();

}

} else {

return "第 " + i + " 个文件为空";

}

}

return "所有文件上传成功";

}

}

但是大于 1MB 的文件上传时会提示出错的,所以要进行设置。添加一个配置文件就可以了。

@Configuration

public class FileUploadConfig {

@Bean

public MultipartConfigElement multipartConfigElement() {

MultipartConfigFactory factory = new MultipartConfigFactory();

factory.setMaxFileSize("100MB");

factory.setMaxRequestSize("100MB");

return factory.createMultipartConfig();

}

}

也可以在 application.properties 中加入这两句:

spring.http.multipart.maxFileSize=100Mb

spring.http.multipart.maxRequestSize=100Mb

二者选其一即可。

2.java 客户端测试程序,Android 端也是如此,我是用 retrofit2 框架,以下是三部分代码:

接口:

public interface TestService {

//文件上传

@Multipart

@POST("upload")

Call> upload(@Part MultipartBody.Part part);

}

API 部分:

public class TestApi extends NetApi {

private static String BASE_URL = “http://192.168.1.101:8080/springbootdemo/file/”;

private static TestService service = NetClient.getRetrofit(BASE_URL).create(TestService.class);

//文件上传

public static void upload(File file, NetCallback callback) {

RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file);

MultipartBody.Part part = MultipartBody.Part.createFormData("file", file.getName(), body);

Call call = service.upload(part);

call.enqueue(callback);

NetManager.addRequest(call);

}

}

测试调用:

public class Test {

public static void main(String[] args) {

String filePath = “E://被遗忘的时光.ape”;

File file = new File(filePath);

NetCallback callback = new NetCallback() {

@Override

protected void onComplete(NetResponse netResponse) {

}

};

TestApi.upload(file, callback);

}

}

测试成功上传!!!

三、HTML5 页面单文件上传和多文件上传

文件:

测试成功!!!!!!!!!!!!!!!!!!!!!!!

作者:宝哥的歌

来源:CSDN

原文:https://blog.csdn.net/xxkalychen/article/details/77842638

版权声明:本文为博主原创文章,转载请附上博文链接!

露水湾 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权

转载请注明原文链接:SpringBoot实现文件上传

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_34194829/article/details/112867169

智能推荐

从0开始的Hadoop之手写WordCount(Idea版)_idea hadoop wordcount-程序员宅基地

文章浏览阅读434次。本文将从Hadoop的下载安装开始,运行出你的第一个MapReduce程序 —— WordCount。实验平台为windows。目录1、Hadoop 的下载和安装下载地址:https://hadoop.apache.org/releases.html选择你要需要的版本,然后点击 Binary 下载。小编使用的是长期支持版3.2.1,点击进入以后会有下载链接,点击下载。下载的是.tar.gz的压缩文件,我们需要对其进行解压。之后是环境变量的配置。ps:其他可选环境变量配置变量名_idea hadoop wordcount

vue 项目中 修改 百度富文本编辑器的 contextMenu_vue-context-menu样式修改-程序员宅基地

文章浏览阅读1.3k次。在data数据中重新配置config中的contextMenu<script>export default { data(){ return { config:{ contextMenu:[ { label:'全文替换', //显示的名称 cmdName:'selectall',//执行的command命令,._vue-context-menu样式修改

特斯拉自研AI芯片,要和英伟达说再见?-程序员宅基地

文章浏览阅读90次。【IT168 资讯】据外媒报道,埃隆·马斯克(Elon Musk)在最近的一次财报会议上透露,该公司已经“秘密”研发用于自动驾驶的定制AI芯片至少两年,而且该芯片已开始生产——当前,特斯拉仍然依赖于英伟达的硬件。..._2020款国产特斯拉的整车系统是自研的还是英伟达

从头实现一个深度学习对话系统--tensorflow Seq-to-Seq API介绍和源码分析_seq-to-seq实例-程序员宅基地

文章浏览阅读6.6k次,点赞9次,收藏17次。上一篇文章中我们已经分析了各种seq2seq模型,从理论的角度上对他们有了一定的了解和认识,那么接下来我们就结合tensorflow代码来看一下这些模型在tf中是如何实现的,相信有了对代码的深层次理解,会在我们之后构建对话系统模型的时候有很大的帮助。tensorflow版本升级之后把之前的tf.nn.seq2seq的代码迁移到了tf.contrib.legacy_seq2seq下面,其实这部分API_seq-to-seq实例

Idea使用-程序员宅基地

文章浏览阅读107次。配置MavenIdea设置导包更改Idea背景颜色

GNU C 、ANSI C、标准C、标准c++区别和联系_ansi c和c++的区别-程序员宅基地

文章浏览阅读2.5k次。GNU计划,又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。它在编写linux的时候自己制作了一个标准成为 GNU C标准。ANSI 美国国家标准协会,它对C做的标准ANSI C标准后来被国际标准协会接收成为标准C 所以 ANSI C 和标准C是一个概念总体来说现在linux也支持标准C,以后标准C可以跨平台,而GUN c 一般只在linux c下应用18.1 ANSI C和标准C++的_ansi c和c++的区别

随便推点

什么是网络安全工程师?待遇好吗?-程序员宅基地

文章浏览阅读433次。什么是网络安全工程师?待遇好吗?_网络安全工程师

pom.xml文件带有删除线的解决方案_pom.xml删除线-程序员宅基地

文章浏览阅读2.7k次。pom.xml文件带有删除线的解决方案_pom.xml删除线

Node.js——HTTP模块_node http-程序员宅基地

文章浏览阅读6.9k次。文章目录Node中的Http一、HTTP服务器1.http.server事件2.http.ServerRequset请求信息3.获取GET请求内容4.获得POST请求内容5.http.ServerResponse返回客户端信息6. 响应乱码7. 不同地址响应不同内容二、Express 框架2.1Express框架是什么2.3Express 框架特性2.4基本使用(入门代码)2.5express的get和post请求2.6获取请求参数(1)req.query2.7获取动态参数Node中的HttpNode_node http

阿宁的Python学习-----去重-程序员宅基地

文章浏览阅读100次。去重第一种方法lists = [1,2,3,4,2,3,4]print(list(set(lists)))第二种办法#使用字典 -- 没有保持原来的顺序lists = [1,2,3,4,2,3,4]a = {}lists = a.fromkeys(lists)lists = lists.keys()print(list(lists))第三种办法#使用循环遍历法 -- 代码不够简洁,不高端lists = [1,2,3,4,2,3,4]list1 = []for i in li

Mac OS X 10.5 Leopard: Direcory Utility, The end of Netinfo-程序员宅基地

文章浏览阅读79次。其实,在OS X Tiger 10.4中,原来有两个应用程序一个叫NetInfo,一个是Directory Access一个主要用于管理本地用户的,另一个用来设置绑定网络Directory服务的,这次的Directory Utility是把这两个的功能合并了。 ...

pycharm如何配置python环境_pycharm配置python运行环境-程序员宅基地

文章浏览阅读7.1w次,点赞28次,收藏156次。pycharm如何配置python环境_pycharm配置python运行环境

推荐文章

热门文章

相关标签