package com.sise.controller;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
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;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;
import java.util.UUID;
@Controller
@RequestMapping("/fileUploadController")
public class FileUploadController {
/*
* 跨服务器文件上传方式
* 用到的jar包
*
* <dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.18.1</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.18.1</version>
</dependency>
*
*
*
**步揍就是
* 表单提交的请求(Request)---->前端控制器(DispatcherServlet)
* --->文件解析器(CommonsMultipartResolver)将表单请求的数据
*解析到一个(MultipartFile)upload对象--->前端控制器(DispatcherServlet)
* ---->再给控制器的办法上接受文件解析器传的对象
* testSpringmvcFL(HttpServletRequest request, MultipartFile upload){}
* 就可以利用这个对象上传文件了
* */
@RequestMapping("/testKuaFWQ")
public String testKuaFWQ(MultipartFile upload) throws Exception {
String path="http://123456.465.465";
/*
File file = new File(path);
if (!file.exists()){
file.mkdirs();
}*/
String filename = upload.getOriginalFilename();
filename= UUID.randomUUID().toString().replace("-","")+"_"+filename;
upload.transferTo(new File(path,filename));
// 创建客户端的对象
Client client = Client.create();
// 和图片服务器进行连接
WebResource webResource = client.resource(path + filename);
// 上传文件
webResource.put(upload.getBytes());
return "success";
}
/*
* Springmvc文件上传方式
*步揍就是
* 表单提交的请求(Request)---->前端控制器(DispatcherServlet)
* --->文件解析器(CommonsMultipartResolver)将表单请求的数据
*解析到一个(MultipartFile)upload对象--->前端控制器(DispatcherServlet)
* ---->再给控制器的办法上接受文件解析器传的对象
* testSpringmvcFL(HttpServletRequest request, MultipartFile upload){}
* 就可以利用这个对象上传文件了
*
* */
public String testSpringmvcFL(HttpServletRequest request, MultipartFile upload) throws Exception {
String path = request.getSession().getServletContext().getRealPath("/WEB-INF/upload/");
File file = new File(path);
if (!file.exists()){
file.mkdirs();
}
DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload uploadd=new ServletFileUpload(factory);
List<FileItem> fileItems = uploadd.parseRequest(request);
for (FileItem fileItem : fileItems) {
if (fileItem.isFormField()){}
else{
String filename = UUID.randomUUID().toString().replace("-", "") + "_" + fileItem.getName();
fileItem.write(new File(path,filename));
fileItem.delete();
}
}
// 说明上传文件项
// 获取上传文件的名称
String filename = upload.getOriginalFilename();
/*
* 等价于
* DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload uploadd=new ServletFileUpload(factory);
List<FileItem> fileItems = uploadd.parseRequest(request);
* for (FileItem fileItem : fileItems) {
if (!fileItem.isFormField()){
}
}
* 也就是利用这个jar下的插件就可以直接拿到该上传的文件数据项,直接
* // 获取上传文件的名称
String filename = upload.getOriginalFilename();就可以得到名称
* 将文件写入该文件夹下并命名该文件名4
* upload.transferTo(new File(path,filename));
*
* //fileItem.write(new File(path,filename));
* */
filename=UUID.randomUUID().toString().replace("-","")+"_"+filename;
// 完成文件上传
upload.transferTo(new File(path,filename));//fileItem.write(new File(path,filename));
return "success";
}
/*
* 传统文件上传方式
* 如果配置了文件解析器,传统方式就上传不成功
* <!--配置文件解析器
该解析器配置的id的名字必须是multipartResolver
必须是这个,记住
-->
<!--配置文件解析器对象-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="10485760" />
</bean>
*
* */
/*
* 需要用到
* <dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
* 这两个jar包
*
* */
@RequestMapping("/fileUploadCT")
public String fileUploadCT(HttpServletRequest request) throws Exception {
/*
* request.getSession().getServletContext()得到一个最大范围的tServletContext
* 再用.getRealPath("/fileuploads/");就可以让文件存再这个目录下
*
* */
System.out.println("文件上传...");
String path = request.getSession().getServletContext().getRealPath("/fileuploads/");
//将文件存在这个目录下
File file = new File(path);
//判断该目录存在不存在,否则就创建
if (!file.exists()) {
file.mkdirs();
}
//下面三步简单的说就是
//创建磁盘文件项工厂用来封装数据和元素
//将磁盘文件项工厂对象存入ServletFileUpload,就可以得到request数据
//fileUpload.parseRequest(request);就可以得到请求的表单文件项
DiskFileItemFactory fileItem = new DiskFileItemFactory();//这个是将表单上传的数据和元素封装再这个磁盘文件项工厂上
ServletFileUpload fileUpload = new ServletFileUpload(fileItem);//用于解析request,解析出装有fileItem对象的一个list集合
//fileItem:每个fileItem的文件项都一个文件以及该文件的其他属性(文件名,大小)
List<FileItem> items = fileUpload.parseRequest(request);
int size = items.size();
System.out.println(size);
for (FileItem item : items) {
if (item.isFormField()){
//普通表单项(文字)不是传文件的
System.out.println("通表单项(文字)不是传文件的");
// item.getString();456546
//item.getFieldName()-->username----> <input type="text" name="username"><br>
}else{
//这个是上传文件的文件项
System.out.println("这个是上传文件的文件项");
String filename = item.getName();
String uuid = UUID.randomUUID().toString().replace("-", "");
filename = uuid+"_"+filename;
// 完成文件上传
item.write(new File(path,filename));
// 删除临时文件
item.delete();
}
}
return "success";
}
/*
* 这个也是传统文件上传方式
*
*
* */
@RequestMapping("/testCTfileUpload")
public String testCTfileUpload(HttpServletRequest request) throws Exception {
//存在WEB-INF下用户访问不到,提高安全性
String path = request.getSession().getServletContext().getRealPath("/WEB-INF/upload/");
File file = new File(path);
if (!file.exists()){
file.mkdirs();
}
//创建磁盘文件项工厂
DiskFileItemFactory factory=new DiskFileItemFactory();
factory.setRepository(new File(request.getSession().getServletContext().getRealPath("/WEB-INF/temps/")));
//上面这句话的意思,就是设置临时文件夹再/WEB-INF/temps/这里,当上传文件大于setSizeThreshold时,他就会放再临时目录中
//往工厂里面添加一个文件上传解析器
ServletFileUpload upload=new ServletFileUpload(factory);
//解决上传文件名中文乱码问题
upload.setHeaderEncoding("UTF-8");
upload.setFileSizeMax(1024*1024*10);//1M大小,表示一个文件大小不大于1M
upload.setSizeMax(1024*1024*30);//表单能从这个表单传3M大小的文件过来,是全部=多个上传的文件大小总和
//使用文件上传解析器解析表单数据,从而得到多个文件项
List<FileItem> items = upload.parseRequest(request);
//表示提交上来的数据是否是上传表单的数据
if (!ServletFileUpload.isMultipartContent(request)){
System.out.println("该数据不是从表单传过来的");
}
for (FileItem item : items) {
if (item.isFormField()){
//普通项,也就是非<input type="file" name="upload" /><br/>
//非 type="file"
}else{
String filename = UUID.randomUUID().toString().replace("-", "") + "_" + item.getName();
item.write(new File(path,filename));
//当上传文件大小超过限制时,他就会它超过的部分放在临时文件目录中,因此需要删除
item.delete();
}
}
return "success";
}
}
版权声明:未标注转载均为本站原创,转载时请以链接形式注明文章出处。如有侵权、不妥之处,请联系站长删除。敬请谅解!
常见资源合集和破解 fmvvvteih...