spring mvc文件上传和跨服务器上传和web上传eclipse配置
程序员文章站
2022-06-03 10:50:05
...
上传文件配置jsp的前提:引入jar包
上传拷贝用的jar包:
分部操作:
MVC上传原理:
配置文件解析器 并且bean里的id固定不能更改:
文件上传web格式:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<!-- 上传文件 web格式 -->
<form action="user/fileupload1" method="post" enctype="multipart/form-data"><!-- enctype="multipart/form-data" 默认属性enctype 意思是让表单分步操作 -->
选择文件:<input type="file" name="upload"><br>
<input type="submit" value="上传">
</form>
</body>
</html>
Web上传:不需要配置解析器
package indexWebSC;
import java.io.File;
import java.util.List;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/user")
public class indexWebSC {
@RequestMapping("/fileupload1")
public String fileupload(HttpServletRequest request) throws Exception {
System.out.println("请选择文件");
//获取路径往该路径传文件
String path = request.getSession().getServletContext().getRealPath("/uploads/");//getRealPath(path)意思获取某某路径的绝对路径
//判断该路径文件是否存在,不存在现在创建
File file = new File(path);
if(!file.exists()) {// .exists意思是文件存在 带上!非 文件不存在
//不存在创建文件
file.mkdirs();// .mkdirs 文件创建
}
//解析request对象,获取上传文件项 这两步相当于在配置解析器web.xml 有器了才能解析
//1步 创建工厂文件项 这里是放的是上传的文件项
DiskFileItemFactory factory = new DiskFileItemFactory();
//2步 解析文件项
ServletFileUpload upload = new ServletFileUpload(factory);
//解析request
List<FileItem> items = upload.parseRequest(request);//.parseRequest(request)解析request 并返回list集合
//items 这里面全是文件项 要进行便利
for(FileItem item:items) {
//进行判断,当前item对象是否是一个上传文件项 或是一个普通的表单项
if(item.isFormField()) {
//true 普通表单项
}else {
//上传文件项
//获取文件名称
String filename = item.getName();
//把文件名设置成唯一值,uuid toString生成该字符串 .replace()替换的意思 把- 替换成空""; 然后再把名字拼接起来
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid + "_" +filename;
//完成文件上传
item.write(new File(path,filename));
//删除临时上传文件项 这里是空间中的垃圾回收
item.delete();
}
}
return "abc";
}
}
mvc上传:
package WJSC;//文件上传
import java.io.File;
import java.io.IOException;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/fileupload1")
public String fileupload1(HttpServletRequest request,MultipartFile upload) throws Exception, IOException {
System.out.println("文件上传");
//上传的位置 .getRealPath("/uploads/") 把逻辑路径转换成物理路径
String path = request.getSession().getServletContext().getRealPath("/uploads/");
//判断,该路径是否存在
File file = new File(path);//创建指定路径下的文件 file(path)
if(!file.exists()) {//!file.exists()文件不存在
file.mkdirs();//创建文件
}
//获取上传文件的名称 如果是getName()意思是获取对象
String filename = upload.getOriginalFilename();//upload.getOriginalFilename()它获取的是上传文件项 如果是upload.getName()它获取的是对象 如果用的是.getName这里还要判断这里的file是上传文件项,还是对象
//把名字变成唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-","");
filename = uuid+"_"+filename;
//完成文件上传 直接传就可以
upload.transferTo(new File(path,filename));
return "abc";
}
}
配置文件解析器:
<!-- 配置文件解析器对象 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
跨服务器上传:思想
跨服务jar:
eclipse配置不同的服务器:
更改成其他的保存就行 通过该服务器执行一个index.jsp文件 可以知道该服务的地址:
http://localhost:8090然后通过该地址往该地址传值:
跨服务:
package WJSC;
import java.io.IOException;
import java.util.UUID;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
//跨服务器上传 这是用于上传的服务器 WJSCSJ:图片服务器
//跨服务器上传 引入jar包
//可以加file 判断path是否存在 当场创建
@Controller
@RequestMapping("/User")
public class UserController2 {
@RequestMapping("/fileupload2")
public String fileupload2(MultipartFile upload) throws Exception, Exception, IOException {
//设置你要跳转的跨服务器路径
String path = "http://localhost:8090/uploads/";
//获取上传文件的名称 如果是getName()意思是获取对象
String filename = upload.getOriginalFilename();//获取上传文件的名称 所选择的文件名称 获取传统的名称 就是文件的名字
//把名字变成唯一值,uuid
String uuid = UUID.randomUUID().toString().replace("-","");
filename = uuid+"_"+filename;
//创建客户端对象
Client client = Client.create();
//和图片服务器进行链接 返回的是WebResource 拿到一个web资源
WebResource webresource = client.resource(path+filename); //前面 地址 /uploads/后面没有加反斜杠/ 就在.resource(path+"/"+filename);
//上传文件 .put() 把什么东西放进去 往里传Object就行
webresource.put(upload.getBytes());//传的要求是一个Bytes数组 字节数组 通过字节的形式传给他
return "abc";
}
}
配置文件解析器 解析upload文件:
<!-- 配置文件解析器对象 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760"></property>
</bean>
数组多文件上传:
多个文件 上传用到 数组
<form action="/user/fileupload1" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload">
选择文件:<input type="file" name="upload">
选择文件:<input type="file" name="upload"> //name="upload"名字不要改变 便于后面解析
选择文件:<input type="file" name="upload">
选择文件:<input type="file" name="upload">
<input type="submit" value="选择文件">
</form>
后台操作 MultipartFile[]数组形式便于存多个文件
@RequestMapping("/fileupload1")
public String fileupload1(HttpServletRequest request,MultipartFile[] upload) throws Exception, IOException {
//获取物理路径
String path = request.getSession().getServletContext().getRealPath("/uploads/");
for(i=1;i<upload.length;i++){
//便利
String filename = upload[i].getOriginalFilename();
File file = new File(path);//创建指定路径下的文件 file(path)
upload[i].transferTo(new File(path,filename));
return "abc";
}
UUID:
uuid设置成唯一值
UUID.randomUUID().toString().replace("-","");
UUID.randomUUID()打印成字符串.toString() 在进行替换 "-"替换成空的字符串""; 把横杠 换成 空 的字符串
String uuid = UUID.randomUUID().toString().replace("-","");
然后在拼一个名字 变成唯一值
filename = uuid+"_"+filename;
form表单:
form表单格式 配置:
form表单的enctype取值必须是:multipart/form-data
(以前的默认属性值是:application/x-www-form-urlencodad)
enctype:是表单请求正文类型
method属性取值必须是Post //如果是get 他会把请求写到地址栏上
提供一个文件选择域<input type="file"/>
<form action="/user/fileupload1" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="upload">
<input type="submit" value="选择文件">
</form>
默认的表单提交数据的格式 是 一组一组的键值对 username=haha&password=123 这个就是以前表单 提交 请求体 的方式
一旦你该成 enctype="multipart/form-data" 他会把表单分成几个部分 可能包含你文本框的值 可能包含你上传文件 选择文件的内容
分开操作
一旦分开操作 进行解析 所需要的jar包提供解析 commons-fileupload-1.3.1.jar
commons-io-2.4.jar 他们帮你解析
配置文件解析器
上一篇: SQL两列数据,行转列