欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

spring mvc文件上传和跨服务器上传和web上传eclipse配置

程序员文章站 2022-06-03 10:50:05
...

上传文件配置jsp的前提:引入jar包
上传拷贝用的jar包:
spring mvc文件上传和跨服务器上传和web上传eclipse配置
分部操作:
spring mvc文件上传和跨服务器上传和web上传eclipse配置
MVC上传原理:
spring mvc文件上传和跨服务器上传和web上传eclipse配置
配置文件解析器 并且bean里的id固定不能更改:
spring mvc文件上传和跨服务器上传和web上传eclipse配置

文件上传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>

跨服务器上传:思想
spring mvc文件上传和跨服务器上传和web上传eclipse配置
spring mvc文件上传和跨服务器上传和web上传eclipse配置
跨服务jar:
spring mvc文件上传和跨服务器上传和web上传eclipse配置
eclipse配置不同的服务器:
spring mvc文件上传和跨服务器上传和web上传eclipse配置
spring mvc文件上传和跨服务器上传和web上传eclipse配置
spring mvc文件上传和跨服务器上传和web上传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 他们帮你解析    
	
	配置文件解析器
相关标签: SSM java spring