默认的文件上传表单最大值是2M,超过了会抛出异常
如果是struts的话,要配置一下文件上传的最大值
在strutsxml中加入 <constant name="strutsmultipartmaxSize" value="10485760"/>
10MB
设置临时文件目录(不用tomcat的默认):
File temp=new File(requestgetSession()getServletContext()getRealPath("/temp"));tempmkdirs();
Systemoutprintln("建立成功");
diskFileItemFactorysetRepository(temp);
enctype就是encodetype就是编码类型的意思。
multipart/form-data是指表单数据有多部分构成,既有文本数据,又有文件等二进制数据的意思。
需要注意的是:默认情况下,enctype的值是application/x->
application/x->
扩展资料:
一、关于HTML <form> 标签的 enctype 属性
application/x->
multipart/form-data: 不对字符编码,或在使用包含文件上传控件的表单时,必须使用该值。
text/plain:空格转换为 "+" 加号,但不对特殊字符编码。
二、enctype:规定了form表单在发送到服务器时候编码方式,有如下的三个值。
1、application/x->
2、multipart/form-data 。 指定传输数据为二进制类型,比如、mp3、文件。
3、text/plain。纯文体的传输。空格转换为 “+” 加号,但不对特殊字符编码。
SpringBoot有它自己的接收请求的代码。下面就给大家详细介绍一下它是如何实现单个文件和多个文件上传的功能的。
首选做一个简单的案例,也就是单个文件上传的案例。(这个案例是基于SpringBoot上面的,所以大家首先得搭建好SpringBoot这个框架)
前台HTML代码:
[html] view plain copy
<html>
<body>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" value="Upload"/>
</form>
</body>
</html>
后台接收代码:
[java] view plain copy
/
文件上传具体实现方法;
@param file
@return
/
@RequestMapping("/upload")
@ResponseBody
public String handleFileUpload(@RequestParam("file") MultipartFile file) {
if (!fileisEmpty()) {
try {
/
这段代码执行完毕之后,上传到了工程的跟路径; 大家自己扩散下思维,如果我们想把上传到
d:/files大家是否能实现呢? 等等;
这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如: 1、文件路径; 2、文件名;
3、文件格式; 4、文件大小的限制;
/
BufferedOutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(
filegetOriginalFilename())));
Systemoutprintln(filegetName());
outwrite(filegetBytes());
outflush();
outclose();
} catch (FileNotFoundException e) {
eprintStackTrace();
return "上传失败," + egetMessage();
} catch (IOException e) {
eprintStackTrace();
return "上传失败," + egetMessage();
}
return "上传成功";
} else {
return "上传失败,因为文件是空的";
}
}
这样就可以实现对multipart/form-data类型文件的接收了。那如果是多个文件外加多个字段呢,下面接着看下一个多个文件上传的案例。
前台HTML界面:
[html] view plain copy
<!DOCTYPE html>
<html xmlns=">
xmlns:sec=">
<head>
<title>Hello World!</title>
</head>
<body>
<form method="POST" enctype="multipart/form-data" action="/batch/upload">
<p>文件1:<input type="text" name="id" /></p>
<p>文件2:<input type="text" name="name" /></p>
<p>文件3:<input type="file" name="file" /></p>
<p><input type="submit" value="上传" /></p>
</form>
</body>
</html>
后台接收代码:
[java] view plain copy
@RequestMapping(value = "/batch/upload", method = RequestMethodPOST)
@ResponseBody
public String handleFileUpload(>
Multipart>
List<MultipartFile> files = ((Multipart>
getFiles("file");
String name=paramsgetParameter("name");
Systemoutprintln("name:"+name);
String id=paramsgetParameter("id");
Systemoutprintln("id:"+id);
MultipartFile file = null;
BufferedOutputStream stream = null;
for (int i = 0; i < filessize(); ++i) {
file = filesget(i);
if (!fileisEmpty()) {
try {
byte[] bytes = filegetBytes();
stream = new BufferedOutputStream(new FileOutputStream(
new File(filegetOriginalFilename())));
streamwrite(bytes);
streamclose();
} catch (Exception e) {
stream = null;
return "You failed to upload " + i + " => "
+ egetMessage();
}
} else {
return "You failed to upload " + i
+ " because the file was empty";
}
}
return "upload successful";
}
这样就可以实现对多个文件的接收了功能了。
<form action="upFilephp" enctype="multipart/form-data" method="post"><input name="myflie" type="file" />
<input type="submit" />
注意 enctype="multipart/form-data", method=post, type="file" 。根据 rfc1867, 这三个属性是必须的。multipart/form-data 是新增的编码类型,以提高二进制文件的传输效率。
数据传输
格式 必须一字不差,包括最后的回车。
注意:Content-Length: 226 这里的226是红色内容的总长度(包括最后的回车)
注意这一行:
Content-Type: multipart/form-data; boundary=-----------------------------264141203718551
根据 rfc1867, multipart/form-data是必须的---------------------------7d33a816d302b6 是分隔符,分隔多个文件、表单项。
其中7d33a816d302b6 是即时生成的字符串,用以确保整个分隔符不会在文件或表单项的内容中出现。
使用POST发送数据
以POST方式发送数据主要是为了向服务器发送较大量的客户端的数据,它不受URL的长度限制。POST请求将数据以URL编码的形式放在>
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)