- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
环境:
表单,enctype 和 input 的type=file 即可,例子使用单文件上传 。
1
2
3
4
5
|
<
form
enctype
=
"multipart/form-data"
method
=
"POST"
action
=
"/file/fileUpload"
>
图片<
input
type
=
"file"
name
=
"file"
/>
<
input
type
=
"submit"
value
=
"上传"
/>
</
form
>
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
@Controller
@RequestMapping
(
"/file"
)
public
class
UploadFileController {
@Value
(
"${file.upload.path}"
)
private
String path =
"upload/"
;
@RequestMapping
(value =
"fileUpload"
, method = RequestMethod.POST)
@ResponseBody
public
String fileUpload(
@RequestParam
(
"file"
) MultipartFile file) {
if
(file.isEmpty()) {
return
"false"
;
}
String fileName = file.getOriginalFilename();
File dest =
new
File(path +
"/"
+ fileName);
if
(!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try
{
file.transferTo(dest);
// 保存文件
return
"true"
;
}
catch
(Exception e) {
e.printStackTrace();
return
"false"
;
}
}
}
|
运行在保存文件 file.transferTo(dest) 报错 。
dest 是相对路径,指向 upload/doc20170816162034_001.jpg 。
file.transferTo 方法调用时,判断如果是相对路径,则使用temp目录,为父目录 。
因此,实际保存位置为 C:\Users\xxxx\AppData\Local\Temp\tomcat.372873030384525225.8080\work\Tomcat\localhost\ROOT\upload\doc20170816162034_001.jpg 。
一则,位置不对,二则没有父目录存在,因此产生上述错误.
transferTo 传入参数 定义为绝对路径 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
@Controller
@RequestMapping
(
"/file"
)
public
class
UploadFileController {
@Value
(
"${file.upload.path}"
)
private
String path =
"upload/"
;
@RequestMapping
(value =
"fileUpload"
, method = RequestMethod.POST)
@ResponseBody
public
String fileUpload(
@RequestParam
(
"file"
) MultipartFile file) {
if
(file.isEmpty()) {
return
"false"
;
}
String fileName = file.getOriginalFilename();
File dest =
new
File(
new
File(path).getAbsolutePath()+
"/"
+ fileName);
if
(!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try
{
file.transferTo(dest);
// 保存文件
return
"true"
;
}
catch
(Exception e) {
e.printStackTrace();
return
"false"
;
}
}
}
|
另外也可以 file.getBytes() 获得字节数组,OutputStream.write(byte[] bytes)自己写到输出流中.
application.properties 中增加配置项 。
1
|
spring.servlet.multipart.location= # Intermediate location of uploaded files.
|
1、增加一个自定义的ResourceHandler把目录公布出去 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
// 写一个Java Config
@Configuration
public
class
webMvcConfig
implements
org.springframework.web.servlet.config.annotation.WebMvcConfigurer{
// 定义在application.properties
@Value
(
"${file.upload.path}"
)
private
String path =
"upload/"
;
public
void
addResourceHandlers(ResourceHandlerRegistry registry) {
String p =
new
File(path).getAbsolutePath() + File.separator;
//取得在服务器中的绝对路径
System.out.println(
"Mapping /upload/** from "
+ p);
registry.addResourceHandler(
"/upload/**"
)
// 外部访问地址
.addResourceLocations(
"file:"
+ p)
// springboot需要增加file协议前缀
.setCacheControl(CacheControl.maxAge(
30
, TimeUnit.MINUTES));
// 设置浏览器缓存30分钟
}
}
|
application.properties 中 file.upload.path=upload/ 。
实际存储目录 。
D:/upload/2019/03081625111.jpg 。
访问地址(假设应用发布在http://www.a.com/) 。
http://www.a.com/upload/2019/03081625111.jpg 。
2、在Controller中增加一个RequestMapping,把文件输出到输出流中 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
@RestController
@RequestMapping
(
"/file"
)
public
class
UploadFileController {
@Autowired
protected
HttpServletRequest request;
@Autowired
protected
HttpServletResponse response;
@Autowired
protected
ConversionService conversionService;
@Value
(
"${file.upload.path}"
)
private
String path =
"upload/"
;
@RequestMapping
(value=
"/view"
, method = RequestMethod.GET)
public
Object view(
@RequestParam
(
"id"
) Integer id){
// 通常上传的文件会有一个数据表来存储,这里返回的id是记录id
UploadFile file = conversionService.convert(id, UploadFile.
class
);
// 这步也可以写在请求参数中
if
(file==
null
){
throw
new
RuntimeException(
"没有文件"
);
}
File source=
new
File(
new
File(path).getAbsolutePath()+
"/"
+ file.getPath());
response.setContentType(contentType);
try
{
FileCopyUtils.copy(
new
FileInputStream(source), response.getOutputStream());
}
catch
(Exception e) {
e.printStackTrace();
}
return
null
;
}
}
|
今天使用transferTo这个方法进行上传文件的使用发现了一些路径的一些问题,查找了一下记录问题所在 。
前端上传网页,使用的是单文件上传的方式 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
<!DOCTYPE html>
<
html
lang
=
"en"
>
<
head
>
<
meta
charset
=
"UTF-8"
>
<
title
>Title</
title
>
<
meta
http-equiv
=
"Content-Type"
content
=
"text/html; charset=utf-8"
/>
</
head
>
<
body
>
<
form
enctype
=
"multipart/form-data"
method
=
"post"
action
=
"/upload"
>
文件:<
input
type
=
"file"
name
=
"head_img"
>
姓名:<
input
type
=
"text"
name
=
"name"
>
<
input
type
=
"submit"
value
=
"上传"
>
</
form
>
</
body
>
</
html
>
|
后台网页 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@Controller
@RequestMapping
(
"/file"
)
public
class
UploadFileController {
@Value
(
"${file.upload.path}"
)
private
String path =
"upload/"
;
@RequestMapping
(value =
"fileUpload"
, method = RequestMethod.POST)
@ResponseBody
public
String fileUpload(
@RequestParam
(
"file"
) MultipartFile file) {
if
(file.isEmpty()) {
return
"false"
;
}
String fileName = file.getOriginalFilename();
File dest =
new
File(path +
"/"
+ fileName);
if
(!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try
{
file.transferTo(dest);
// 保存文件
return
"true"
;
}
catch
(Exception e) {
e.printStackTrace();
return
"false"
;
}
}
}
|
这个确实存在一些问题 。
路径是不对的 。
dest 是相对路径,指向 upload/doc20170816162034_001.jpg 。
file.transferTo 方法调用时,判断如果是相对路径,则使用temp目录,为父目录 。
因此,实际保存位置为 C:\Users\xxxx\AppData\Local\Temp\tomcat.372873030384525225.8080\work\Tomcat\localhost\ROOT\upload\doc20170816162034_001.jpg 。
所以改为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
@Controller
@RequestMapping
(
"/file"
)
public
class
UploadFileController {
@Value
(
"${file.upload.path}"
)
private
String path =
"upload/"
;
@RequestMapping
(value =
"fileUpload"
, method = RequestMethod.POST)
@ResponseBody
public
String fileUpload(
@RequestParam
(
"file"
) MultipartFile file) {
if
(file.isEmpty()) {
return
"false"
;
}
String fileName = file.getOriginalFilename();
File dest =
new
File(
new
File(path).getAbsolutePath()+
"/"
+ fileName);
if
(!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try
{
file.transferTo(dest);
// 保存文件
return
"true"
;
}
catch
(Exception e) {
e.printStackTrace();
return
"false"
;
}
}
}
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我.
原文链接:https://blog.csdn.net/dany_zj_cn/article/details/82019253 。
最后此篇关于解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题的文章就讲到这里了,如果你想了解更多关于解决MultipartFile.transferTo(dest) 报FileNotFoundExcep的问题的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 Spring 4 和 Java Config。我想将多个文件上传到服务器,但问题是我的 MultipartFile[ ] 参数将始终接收空/[ ] 参数。让我在这里分享我的代码是我的“Ap
我正在使用 MultPartFile 从前端上传 .zip,有时在我对其执行任何操作之前,该文件会被删除。我调试 CommonsMultipartFile.class (intellij) 来清理我的
我面临以下问题:我使用 MultipartFile 提交带有电子邮件等其他信息的图像。 考虑这样一种情况,我们有两个字段:输入 = 带电子邮件的文本和带文件的输入(输入类型 = 文件)。在服务器端,我
我需要将从客户端接收到的 MultipartFile 转换为字节数组,以将其发送到另一台服务器(无需在第一台服务器上保存文件)。我想使用 MultipartFile.getBytes() 函数,将其转
有什么方法可以将 File 对象转换为 MultiPartFile?这样我就可以将该对象发送到接受 MultiPartFile 接口(interface)对象的方法? File myFile = ne
我有一个使用 spring boot 的 Java 11 应用程序。 我的请求 Controller 中有这个请求: @RestController public class ImportContro
我以 BASE64 编码字符串(encodedBytes)的形式接收图像,并使用以下方法在服务器端解码为 byte[]。 BASE64Decoder decoder = new BASE64Decod
我希望用户能够提交任意数量的具有任意名称和原始文件名的文件。 如何获取请求中已提交文件的列表? @RequestParam(name = "*") MultipartFile[] files 我希望使
我尝试通过 post 方法将图像从ionic前端应用程序发送到中的后端服务 Spring 启动 我已经完成了这个方法,使用 FormData 对象内的图像将帖子发送到后端 url: uploadI
如果存在 MultipartFile,为什么 @Valid 注释不适用于我的域模型?我的 Controller 中有以下代码: @PostMapping("/create") public Strin
我有一个可以上传文件的表单。有一个问题,即使没有选择或上传文件,@RequestParam 值的大小也是我希望它为空或 null 的大小。 最佳答案 根据this official这里的 Mozill
我正在使用 MultipartFile 发送包含多个附件的电子邮件。我的代码工作正常,但我将每个文件存储在我的项目中,然后附加。我不想将该文件存储在任何地方,而是希望将文件直接发送给收件人。我的代码是
我正在尝试获取MultipartFile的内容,它是通过MultipartHttpServletRequest.getFile()获取的。 MultipartFile 中有两个函数: bytes[]
我想提取文件路径然后可以上传到谷歌驱动器。如何从 MultipartFile 获取路径? //logger.info(""+uploadFile.getClass().getResource(
我通过文件转换为MultipartFile,但是MultipartFile是空的,请帮忙确认一下,非常感谢,代码如下: File file = new File("/Users/aikaliu/doc
我正在尝试上传超过 1 GB 的文件,我正在使用 Spring Boot。 我已尝试使用以下代码,但出现内存不足错误。 public void uploadFile(MultipartFile fil
我正在使用此代码将图像文件发布到我的 Controller ,但我总是得到文件正文部分的空值。 @RequestMapping(value = "/updateprofile", method = R
我正在使用 angularJs 和 spring 4.0, 我的 Controller 代码: @RequestMapping(value = "/endpoint/add", method = Re
以下是我从网页上传多个文件的函数。我的文件位于 MultipartFile --> 文件变量列表中。我无法迭代每个文件。然而 log.info("file"+files) 打印了 file[]。这意味
我有这样的用户界面代码 .factory('Service', function ($http, $resource, BASE_PATH) { function sendResponse (co
我是一名优秀的程序员,十分优秀!