文件上传
文件上传
1.先在pom导入jar包Apache commons FileUpload文件
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency>
2.在SpringMVC的配置文件中写一个CommonsMultipartResolver配置,id必须为multipartResolver.
<!-- springMVC可以处理文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>
3.写一个类,调用DefaultMultipartHttpServletRequest类方法
package com.action; import java.io.File; import java.io.IOException; import java.util.Iterator; import javax.servlet.http.HttpServletRequest; import org.aspectj.weaver.Iterators; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartResolver; import org.springframework.web.multipart.support.DefaultMultipartHttpServletRequest; @Controller public class FileUploadAction { @Autowired private HttpServletRequest request; public String upload(DefaultMultipartHttpServletRequest requestfile) throws Exception, IOException{ Iterator<String> it=requestfile.getFileNames(); if(it.hasNext()==false){ return ""; } MultipartFile images=requestfile.getFile(it.next()); // 如果不存在temps文件就创建 String temps=request.getServletContext().getRealPath("\temps"); File file=new File(temps); if(file.exists()==false){ file.mkdir(); } // 把文件存在temps文件夹中 String oldFilename=images.getOriginalFilename(); int index=oldFilename.lastIndexOf("."); String ext=oldFilename.substring(index); String newfile=System.currentTimeMillis()+ext; images.transferTo(new File(temps+File.separator+newfile)); return newfile; } }
4.在web.xml中配置中文处理过滤器
<!-- 中文处理过滤器 --> <filter> <filter-name>ChineseFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>ChineseFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
5.在form表单页面上要写
<from action="${pagecontext.request.contextpath}/upload" method="post" enctype="muiltipart/form-data"> <input type="file" name="images"/>
6.在页面上输入映射路径
localhost:8080/upload/index.jsp
*****文件上传之上传编辑器webupload+ueditor+ssm
1.导入pom文件
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.3</version> </dependency> <!-- 文本编辑器 --> <!-- https://mvnrepository.com/artifact/com.gitee.qdbp.thirdparty/ueditor --> <dependency> <groupId>com.gitee.qdbp.thirdparty</groupId> <artifactId>ueditor</artifactId> <version>1.4.3.3</version> </dependency>
2.同样的要在spring-servlet中配置muiltipartResolver
<!-- springMVC可以处理文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> </bean>
3. 编写studentAction
package com.action;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.util.FileCopy;
@Controller
public class StudentAction {
@Autowired
private HttpServletRequest request;
@RequestMapping("/addStudent")
public String addStudent(String name, String filename, String jianli)
{
System.out.println("姓名:"+name);
System.out.println("文件名:"+filename);
System.out.println("简历:"+jianli);
//复制tmp到images
FileCopy.copy(request, "/temp","/images",filename);
//写OSS
return "success";
}
}
4.在网上下载webuploader-0.1.5,和ueditor1_4_3_3-utf8-jsp放到WEB-INF下面的一个js目录下
5.编写一个JSP页面
1.需要导入一些webupload里面的js和editor的js
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/webuploader-0.1.5/webuploader.css"> <script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/webuploader-0.1.5/webuploader.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/ueditor1_4_3_3-utf8-jsp/utf8-jsp/ueditor.config.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/ueditor1_4_3_3-utf8-jsp/utf8-jsp/ueditor.all.min.js"></script>
2.写一个form表单
<form> 姓名:<input type=text name="name" id="name"/> <br> 玉照: <!--dom结构部分--> <div id="uploader-demo"> <!--用来存放item--> <div id="fileList" class="uploader-list"></div> <div id="filePicker">选择图片</div> </div> 简历: <script id="jianli" type="text/javascript"></script> <br> <button id="btnAdd" type="button">上传</button> </form>
3.在script里面写一些editor和webupload初始化代码
<script> //初始化编辑器 var ue = UE.getEditor('jianli'); var filename = null; $("#btnAdd").click(function(){ var name = $("#name").val(); var jianli = ue.getContent(); var url = "${pageContext.request.contextPath}/addStudent"; var data = {name:name,jianli:jianli,filename:filename}; var callback = function(data) { } $.post(url,data,callback); });
// 初始化Web Uploader var $list = $("#fileList"); var thumbnailWidth = 200; var thumbnailHeight = 200; var uploader = WebUploader.create({ // 选完文件后,是否自动上传。 auto: true, // swf文件路径 swf: '/js/Uploader.swf', // 文件接收服务端。 server: '${pageContext.request.contextPath}/upload', // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick: '#filePicker', // 只允许选择图片文件。 accept: { title: 'Images', extensions: 'gif,jpg,jpeg,bmp,png', mimeTypes: 'image/*' } });
部分的js代码
// 当有文件添加进来的时候 uploader.on( 'fileQueued', function( file ) { var $li = $( '<div id="' + file.id + '" class="file-item thumbnail">' + '<img>' + '<div class="info">' + file.name + '</div>' + '</div>' ), $img = $li.find('img'); // $list为容器jQuery实例 $list.append( $li ); // 创建缩略图 // 如果为非图片文件,可以不用调用此方法。 // thumbnailWidth x thumbnailHeight 为 100 x 100 uploader.makeThumb( file, function( error, src ) { if ( error ) { $img.replaceWith('<span>不能预览</span>'); return; } $img.attr( 'src', src ); }, thumbnailWidth, thumbnailHeight ); }); // 文件上传成功,给item添加成功class, 用样式标记上传成功。 uploader.on( 'uploadSuccess', function( file, response ) { filename = response._raw ; //预览上传后的文件名 $( '#'+file.id ).addClass('upload-state-done'); }); // 文件上传失败,显示上传出错。 uploader.on( 'uploadError', function( file ) { var $li = $( '#'+file.id ), $error = $li.find('div.error'); // 避免重复创建 if ( !$error.length ) { $error = $('<div class="error"></div>').appendTo( $li ); } $error.text('上传失败'); });
5.写一个util类
package com.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import javax.servlet.http.HttpServletRequest; public class FileCopy { /** * * @param request * @param srcDir 源目录 * @param desDir 目的目录 * @param oldFile 源文件名 * @return */ public static boolean copy(HttpServletRequest request, String srcDir, String desDir, String oldFile) { try { String realSrcDir = request.getSession().getServletContext() .getRealPath(srcDir); String realDesDir = request.getSession().getServletContext() .getRealPath(desDir); InputStream is = new FileInputStream(realSrcDir + "/" + oldFile); OutputStream os = new FileOutputStream(realDesDir + "/" + oldFile); byte[] b = new byte[10240]; int size = is.read(b); while (size > 0) { os.write(b, 0, size); size = is.read(b); } os.close(); is.close(); return true; } catch (Exception e) { e.printStackTrace(); } return false; } }