慕课网文件上传

  servlet方式上传:

UploadServlet.java 
 1 package com.imooc.servlet;
 2
 3 import java.io.File;
 4 import java.io.FileOutputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7 import java.io.RandomAccessFile;
 8
 9 import javax.servlet.RequestDispatcher;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 public class UploadServlet extends HttpServlet {
16
17     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18         doPost(req, resp);
19     }
20
21     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
22         // 从request当中获取流信息
23         InputStream fileSource = req.getInputStream();
24         String tempFileName = "E:/tempFile";
25         // tempFile指向临时文件
26         File tempFile = new File(tempFileName);
27         // outputStram文件输出流指向这个临时文件
28         FileOutputStream outputStream = new FileOutputStream(tempFile);
29         byte b[] = new byte[1024];
30         int n;
31         while ((n = fileSource.read(b)) != -1) {
32             outputStream.write(b, 0, n);
33         }
34         // 关闭输出流、输入流
35         outputStream.close();
36         fileSource.close();
37
38         // 获取上传文件的名称
39         RandomAccessFile randomFile = new RandomAccessFile(tempFile, "r");
40         randomFile.readLine();
41         String str = randomFile.readLine();
42         int beginIndex = str.lastIndexOf("\\") + 1;
43         int endIndex = str.lastIndexOf("\"");
44         String filename = str.substring(beginIndex, endIndex);
45         System.out.println("filename:" + filename);
46
47         // 重新定位文件指针到文件头
48         randomFile.seek(0);
49         long startPosition = 0;
50         int i = 1;
51         // 获取文件内容 开始位置
52         while ((n = randomFile.readByte()) != -1 && i <= 4) {
53             if (n == ‘\n‘) {
54                 startPosition = randomFile.getFilePointer();
55                 i++;
56             }
57         }
58         startPosition = randomFile.getFilePointer() - 1;
59         // 获取文件内容 结束位置
60         randomFile.seek(randomFile.length());
61         long endPosition = randomFile.getFilePointer();
62         int j = 1;
63         while (endPosition >= 0 && j <= 2) {
64             endPosition--;
65             randomFile.seek(endPosition);
66             if (randomFile.readByte() == ‘\n‘) {
67                 j++;
68             }
69         }
70         endPosition = endPosition - 1;
71
72         // 设置保存上传文件的路径
73         String realPath = getServletContext().getRealPath("/") + "images";
74         File fileupload = new File(realPath);
75         if (!fileupload.exists()) {
76             fileupload.mkdir();
77         }
78         File saveFile = new File(realPath, filename);
79         RandomAccessFile randomAccessFile = new RandomAccessFile(saveFile, "rw");
80         // 从临时文件当中读取文件内容(根据起止位置获取)
81         randomFile.seek(startPosition);
82         while (startPosition < endPosition) {
83             randomAccessFile.write(randomFile.readByte());
84             startPosition = randomFile.getFilePointer();
85         }
86         // 关闭输入输出流、删除临时文件
87         randomAccessFile.close();
88         randomFile.close();
89         tempFile.delete();
90
91         req.setAttribute("result", "上传成功!");
92         RequestDispatcher dispatcher = req.getRequestDispatcher("jsp/01.jsp");
93         dispatcher.forward(req, resp);
94     }
95 }
DownloadServlet.java
 1 package com.imooc.servlet;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.IOException;
 6 import java.io.InputStream;
 7
 8 import javax.servlet.RequestDispatcher;
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletOutputStream;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 public class DownloadServlet extends HttpServlet {
16
17     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
18         // 获取文件下载路径
19         String path = getServletContext().getRealPath("/") + "images/";
20         String filename = req.getParameter("filename");
21         File file = new File(path + filename);
22         if (file.exists()) {
23             // 设置相应类型application/octet-stream
24             resp.setContentType("application/x-msdownload");
25             // 设置头信息
26             resp.setHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");
27             InputStream inputStream = new FileInputStream(file);
28             ServletOutputStream ouputStream = resp.getOutputStream();
29             byte b[] = new byte[1024];
30             int n;
31             while ((n = inputStream.read(b)) != -1) {
32                 ouputStream.write(b, 0, n);
33             }
34             // 关闭流、释放资源
35             ouputStream.close();
36             inputStream.close();
37
38         } else {
39             req.setAttribute("errorResult", "文件不存在下载失败!");
40             RequestDispatcher dispatcher = req.getRequestDispatcher("jsp/01.jsp");
41             dispatcher.forward(req, resp);
42         }
43
44     }
45
46     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
47         doGet(req, resp);
48     }
49
50 }

jsp:

 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11
12     <title>My JSP ‘01.jsp‘ starting page</title>
13
14     <meta http-equiv="pragma" content="no-cache">
15     <meta http-equiv="cache-control" content="no-cache">
16     <meta http-equiv="expires" content="0">
17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18     <meta http-equiv="description" content="This is my page">
19     <link rel="stylesheet" type="text/css" href="css/common.css" />
20     <script type="text/javascript" src="js/jquery-1.11.1.js"></script>
21     <script type="text/javascript">
22         $(function(){
23             $(".thumbs a").click(function(){
24                 var largePath  = $(this).attr("href");
25                 var largeAlt = $(this).attr("title");
26                 $("#largeImg").attr({
27                     src : largePath,
28                     alt : largeAlt
29                 });
30                 return false;
31             });
32
33             $("#myfile").change(function(){
34                 $("#previewImg").attr("src","file:///" + $("#myfile").val());
35             });
36
37             var la = $("#large");
38             la.hide();
39
40             $("#previewImg").mousemove(function(e){
41                 la.css({
42                     top : e.pageY,
43                     left : e.pageX
44                 }).html(‘<img src = "‘ + this.src + ‘" />‘).show();
45             }).mouseout(function(){
46                 la.hide();
47             });
48         });
49         /*  //使用js实现文件上传图片的预览
50         function showPreview(obj){
51             var str = obj.value;
52             document.getElementById("previewImg").innerHTML =
53                 "<img src = ‘" + str + "‘ />";
54         }
55         */
56         function showPreview(obj){
57             var str = obj.value;
58             document.getElementById("previewImg").innerHTML =
59                 "<img src = ‘" + str + "‘ />";
60         }
61     </script>
62   </head>
63
64   <body>
65
66        <img id="previewImg" src="images/preview.jpg" width="80" height="80" />
67        <form action="uploadServlet.do" method="post" enctype="multipart/form-data">
68           请选择图片:<input id="myfile" name="myfile" type="file" onchange="showPreview(this)"/>
69           <input type="submit" value="提交"  />${result}
70       </form>
71       下载:<a href="downloadServlet.do?filename=test1.txt">test1.txt</a> &nbsp;&nbsp; ${errorResult}
72
73       <div id="large"></div>
74
75       <hr>
76     <h2>图片预览</h2>
77     <p><img id="largeImg" src="images/img1-lg.jpg" alt="Large Image"/></p>
78     <p class="thumbs">
79         <a href="images/img2-lg.jpg" title="Image2"><img src="images/img2-thumb.jpg"></a>
80         <a href="images/img3-lg.jpg" title="Image3"><img src="images/img3-thumb.jpg"></a>
81         <a href="images/img4-lg.jpg" title="Image4"><img src="images/img4-thumb.jpg"></a>
82         <a href="images/img5-lg.jpg" title="Image5"><img src="images/img5-thumb.jpg"></a>
83         <a href="images/img6-lg.jpg" title="Image6"><img src="images/img6-thumb.jpg"></a>
84     </p>
85   </body>
86 </html>

项目目录

时间: 2024-08-06 11:49:08

慕课网文件上传的相关文章

使用SpringMVC进行文件上传

文件上传是表现层常见的需求,在Spring MVC中底层使用Apache的Commons FileUpload工具来完成文件上传,对其进行封装,让开发者使用起来更加方便.接下来看看如何开发? 1 导入common-fileupload包 <!-- commons-fileUpload --> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupl

根据百度网盘的上传原理,自己写大文件上传

在之前大文件的上传我都是通过FilderReader获取文件的base64然后转为Blob在一段一段截取上传,但是这个方法有个弊端就是很大的文件的时候获取文件的base64会使整个浏览器崩溃卡死,后面我去看了一下百度网盘的上传原理 我们可以看到百度是通过类似表单提交的方式上传文件的,这样子似乎不需要把文件转化为base64减少了浏览器的开销.那个让我们来动手做一个大文件上传吧 这里用input标签来获取需要上传的文件 获取到file对象以后我们就可以得到 这样一个对象里面就是文件的大小名字等信息

内网/外网大文件上传解决方案

最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表格数据.上传影音文件等.如果文件体积比较大,或者网络条件不好时,上传的时间会比较长(要传输更多的报文,丢包重传的概率也更大),用户不能刷新页面,只能耐心等待请求完成. 下面从文件上传方式入手,整理大文件上传的思路,并给出了相关实例代码,由于PHP内置了比较方便的文件拆分和拼接方法,因此服务端代码使用

文件上传到tomcat服务器 commons-fileupload的详细介绍与使用

三个类:DiskFileUpload.FileItem和FileUploadException.这三个类全部位于org.apache.commons.fileupload包中. 首先需要说明一下form表格的enctpye的属性: 表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码.默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传:只有使用了multipart/form-data,

jQuery File Upload文件上传插件使用

jQuery File Upload 是一个Jquery文件上传组件,支持多文件上传.取消.删除,上传前缩略图预览.列表显示图片大小,支持上传进度条显示:支持各种动态语言开发的服务器端.官网链接:https://github.com/blueimp/jQuery-File-Upload/wiki 特点:拖放支持:上传进度条:图像预览:可定制和可扩展的:兼容任何服务器端应用平台(PHP, Python, Ruby on Rails, Java, Node.js, Go etc.). 使用方法: 1

【Jsp】使用AjaxFileUploader与jspsmartupload完成不刷新的Ajax文件上传系统

这个不刷新的Ajax文件上传系统同样可以用来做预览图 虽然预览图完全可以通过不上传图片就完成,但是不刷新的Ajax文件上传系统可以做到上传完图片立即返回上传结果给用户的结果 上次在<[Jsp]使用jspsmartupload完成简单的文件上传系统>(点击打开链接)一文中完成了一个简单的文件上传系统 但是这个文件上传系统过于传统, 上传完文件之后需要跳转到另外一个页面中提交表单,处理表单,然后再提供一个"返回"按钮给用户 如果用户要求上传之后,马上看到图片,并且不跳转,只好利

异步文件上传组件 Uploader

Uploader是非常强大的异步文件上传组件,支持ajax.iframe.flash三套方案,实现浏览器的全兼容,调用非常简单,内置多套主题支持 和常用插件,比如验证.图片预览.进度条等,广泛应用于淘宝网,比如退款系统.爱逛街.二手.拍卖.我的淘宝.卖家中心.导购中心等. Uploader的特性 支持ajax.flash.iframe三种方案,兼容所有浏览器.(iframe不推荐使用) 多主题支持,可以自己定制主题 丰富的插件支持 支持多选批量上传 支持上传进度显示 支持取消上传 支持图片预览(

web 文件上传组件 Plupload

Plupload官网:点击打开链接   建议下载最新版本,低版本会出现浏览器兼容问题. 最近公司有个项目需要在web端使用多文件上传功能,刚开始准备使用HTML5来做,但是IE9以下是都不支持的,于是想到了flash,在网上搜了下各种开源的组件,最后决定使用Plupload,下面来介绍一下该组件使用时遇到的一些问题以及解决方案. 先贴出配置参数: <script type="text/javascript"> // Initialize the widget when th

Jquery Uploadify多文件上传实例

jQuery Uploadify开发使用的语言是java. 详细的相关文档,可以参考官网的doc:http://www.uploadify.com/documentation/ 官网的讲解还是很详细的,关键是要耐心看.虽说是英文,单有百度翻译. 看官网jQuery uploadify有基于flash和html5 的2个版本.我使用的是基于flash的. Jsp页面引用的文件有: <!-- 转诊单的附件商场页面 --> <script type="text/javascript&