-
7.创建输入流读取需要下载的文件,并通过resp获取输出流写入该文件. InputStream input=new FileInputStream(file); ServletOutputStream output=resp.getOutputStream(); 8.循环读取与写入 byte b[]=new byte[1024]; int n; while((n=input.read(b))!=-1){ output.write(b,0,n); } 9.关闭流 output.close(); input.close(); 10.在前台页面中使用EL表达式接收错误信息. ${errorResult}查看全部
-
实现文件下载原理 1.jsp页面中定义一个超链接并带上下载文件的文件名. <a href="uploadServlet?filename=text.txt">text.txt</a> 2.创建Servlet接收请求,并定位文件下载的路径,即服务器的根目录再加上要下载文件名. 先得到根路径,再加上存放文件的文件夹. String path=getServletContext().getRealPath("/")+"images/"; String filename=req.getParameter("filename"); 3.定义File对象,描述服务器端中要下载的那个文件信息. File file=new File(path+filename); 4.判断文件是否存在,如果存在则在if语句内执行下载的逻辑,否则反馈给客户端一个信息. if(file.exists()){ }else{ req.setAttribute("errorResult","文件不存在,下载失败!"); request.getRequestDispatcher("jsp/view1.jsp").forword(res,resp); } 5.在if()语句内完成文件下载逻辑. 首先用resp.setContentType()方法设置ContentType为application/x-msdownload. ContentType的类型不同,客户端和浏览器也会调用不同类型的模块来处理相应的数据. 因此想设置为下载类型,那么就应该设置成application/x-msdownload或application/octet-stream类型. 6.通过resp的setHeader()方法设置头信息. resp.setHeader("Content-Dispositon","attachment;filename=\""+filename+"\""); 此作用是指定以附件的形式来打开下载的文件,并指定附件的名称,那么在下载该文件的时候,文件名就是这里设定的文件名.查看全部
-
步骤6 // 关闭输入输出流、删除临时文件 accessTempFile.close(); accessSaveFile.close(); // tempFile.delete(); // 给客户端的反馈信息 request.setAttribute("returning", "上传成功"); request.setAttribute("filename", "文件名为:" + fileName); // 设置请求转发,request对象会保留 request.getRequestDispatcher("/jsp/first.jsp").forward(request, response); } } }查看全部
-
步骤4 // 设置保存上传文件的路径 String realPath = request.getServletContext().getRealPath("/") + "images"; // 创建fileUpLoad对象是为了防止不存在此上传文件的路径. File fileUpLoad = new File(realPath); // 若不存在则创建 if (!fileUpLoad.exists()) { fileUpLoad.mkdirs(); } // 创建保存在服务器端,即最终上传文件的File对象,参数为上方设置好的上传文件路径与客户端上传文件的文件名. File saveload = new File(realPath, fileName); 步骤5 // 创建一个新的RandomAccessFile对象将临时文件中客户端上传文件的文件名与文件内容保存在服务器端最终上传的文件中. RandomAccessFile accessSaveFile = new RandomAccessFile(saveload, "rw"); // 从临时文件当中读取文件内容,先把访问临时文件的RandomAccessFile对象的指针定位到内容之前. accessTempFile.seek(beginContentIndex); // 循环读取文件内容 while (beginContentIndex < endContentIndex) { // 从临时文件中读取内容的同时把内容写入在最终保存的文件中. accessSaveFile.write(accessTempFile.readByte()); // 更新读取文件内容的起始位置 beginContentIndex = accessTempFile.getFilePointer(); }查看全部
-
从临时文件中获取客户端上传的文件的内容,仍然使用accessTempFile. // 记录临时文件中有效内容的起始下标. long beginContentIndex = 0; // 记录成功读取的字节个数. int n = 0; // 定义行数变量. int i = 1; // 设置指针的位置为0,因为上面用accessTempFile读取了客户端上传文件的文件名信息. accessTempFile.seek(0); // 循环读取临时文件,一个字节一个字节来读,当读取的字节为'\n',即换行转译符,行数自增,即i++.i<=4即读到第三行的结尾.即hello // is me的上一行. while ((n = accessTempFile.readByte()) != -1 && i <= 4) { if (n == '\n') { // 获取当前指针的位置. beginContentIndex = accessTempFile.getFilePointer(); i++; } } //必须要减1! beginContentIndex = accessTempFile.getFilePointer()-1; //获取临时文件的结束位置 accessTempFile.seek(accessTempFile.length()); //定位此时的结束位置 long endContentIndex = accessTempFile.getFilePointer(); int j = 1; while(endContentIndex >=0 && j<=2){ //从后往前读取,一直递减,当读取到'\n'换行字符时便跳出循环,此时指针的位置就定位到实际内容的结尾. endContentIndex--; accessTempFile.seek(endContentIndex); if(accessTempFile.readByte() == '\n'){ j++; } } //减1 endContentIndex = endContentIndex -1;查看全部
-
// 关闭输入流. inputStream.close(); // 关闭输出流. fileOutPutStream.close(); 步骤3 从临时文件中获取客户端提交的文件的文件名. // 设置为只读 RandomAccessFile accessTempFile = new RandomAccessFile(tempFile, "r"); // 每次读取临时文件中的一行,第一行为序列号信息,无有效信息. accessTempFile.readLine(); // 临时文件中的第二行数据中存在客户端提交文件的名称(有效信息). String secondData = accessTempFile.readLine(); // 获取第二行字符串中最后一次出现"=""字符串的下标.双引号中引入双引号需要转译,使用\"代表一个双引号. //字符串的subString(int begin,int end)方法,包含begin的位置,不包含end的位置,从0开始. int beginIndex = secondData.lastIndexOf("=\"")+2; // 获取第二行字符串中最后一次出现"号的下标.不需要减1,因为subString不包括最后一个字符. int endIndex = secondData.lastIndexOf("\""); // 获取客户端上传文件的文件名.文件名为:mess.txt,不能留有""号,否则会保存失败. String fileName = secondData.substring(beginIndex, endIndex);查看全部
-
实现文件上传后台Servlet: 步骤(upload): 1.表单上传文件,提交到Servlet中. 2.Servlet中通过request获取输入流来读取客户端提交上来的文件信息,将文件所有信息读取在Java应用程序中的同时写入在本地临时文件中.因此需要定义一个File对象,用来指定临时文件路径. 3.使用RandomAccessFile访问临时文件,参数是临时文件的File对象.读取临时文件中保存客户端文件的文件名与内容信息进Java应用程序中. 4.创建一个新的File对象,用来指定保存文件实际内容的服务器端路径,即最终上传的文件. 5.创建新的RandomAccessFile对象,参数为保存在服务器端最终上传文件的File对象,将临时文件中的实际内容保存在服务器端的最终文件. 6.删除临时文件 public void doPost{ 步骤2 将客户端上传的文件保存在本地临时文件中. // 从request中获取中获取输入流 InputStream inputStream = request.getInputStream(); // 定义一个File,用来指明临时文件的路径(任意). File tempFile = new File("D:/tempFile"); // 获取输出流,参数为临时文件File对象,即把从request获取的输入流读取的数据通过输出流写入到临时文件中. FileOutputStream fileOutPutStream = new FileOutputStream(tempFile); // 定义字节数组存放读取的数据. byte data[] = new byte[1024]; // 创建计数器用来记录成功读取的字节数. int count = 0; // 循环读取客户端提交上来的文件信息保存在Java应用程序中的data字节数组里. while ((count = inputStream.read(data)) != -1) { // 读取文件信息的同时写入文件信息到临时文件中,把data字节数组写入到临时文件中,从data字节数组中的第一个字节开始写入,写入读取成功的个数. fileOutPutStream.write(data, 0, count); }查看全部
-
<body> <form action="servlet/download" method="post" enctype="multipart/form-data"> 请选择图片路径:<input name="myFile" id="sc" type="file"/> <input type="submit" value="提交" />${returning} ${filename} <!--上传反馈信息,使用jsp或者el表达式,直接${returning} <% if(returnmess!=null){ out.println(returnmess); } %>--> </form> <div class="preview"> <img id="previewPic" src=""></img> </div> <hr/> <h2>图片预览</h2> <div class="bigPicture"> <img id="bigP" src="images/img1-lg.jpg" alt="大图1"></img> </div> <div class="smallPic"> <a href="images/img2-lg.jpg" title="大图2"><img src="images/img2-thumb.jpg"></img></a> <a href="images/img3-lg.jpg" title="大图3"><img src="images/img3-thumb.jpg" ></img></a> <a href="images/img4-lg.jpg" title="大图4"><img src="images/img4-thumb.jpg" ></img></a> <a href="images/img5-lg.jpg" title="大图5"><img src="images/img5-thumb.jpg" ></img></a> <a href="images/img6-lg.jpg" title="大图6"><img src="images/img6-thumb.jpg"></img></a> </div> </body>查看全部
-
实现上传文件jsp完整页面: <script type="text/javascript"> /** *设置图片大图预览 * */ $(function(){ $(".smallPic a").click(function(){ var bigpic=$(this).attr("href"); var bigtitle=$(this).attr("title"); $("#bigP").attr({ "src":bigpic, "alt":bigtitle }); return false; }); $("#previewPic").hide(); /** *设置图片预览 */ $("input[type=file]").change(function(){ var urlpath=$(this).val(); $("#previewPic").attr("src",urlpath); $("#previewPic").show(); }); }); </script>查看全部
-
这里要加载图片需要在src中添加<%=request.getContextPath()%><br> 比如:<br> <p><br> <img id="largeImg" src="<%=request.getContextPath()%>/images/img1-lg.jpg" alt="Large Imgage"><br> </p><%=request.getContextPath()%><br> <p class="thumbs"><br> <img src="<%=request.getContextPath()%>/images/img2-thumb.jpg"><br> <img src="<%=request.getContextPath()%>/images/img3-thumb.jpg"><br> <img src="<%=request.getContextPath()%>/images/img4-thumb.jpg"><br> <img src="<%=request.getContextPath()%>/images/img5-thumb.jpg"><br> <img src="<%=request.getContextPath()%>/images/img6-thumb.jpg"><br> </p>查看全部
-
临时文件存放的信息为: ------WebKitFormBoundaryPFpeBcjr7b2PiMPV Content-Disposition: form-data; name="myFile"; filename="mess.txt" Content-Type: text/plain hello is me ------WebKitFormBoundaryPFpeBcjr7b2PiMPV--查看全部
-
实现文件上传原理: jsp页面: <form action="servlet/download" method="post" enctype="multipart/form-data"> 请选择图片路径:<input name="myFile" id="sc" type="file"/> <input type="submit" value="提交" /> </form> servlet后台: public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //从request当中获取流信息 InputStream fileSource = request.getInputStream(); String tempFileName = "E://tempFile"; //tempFile指向临时文件 File tempFile = new File(tempFileName); //outputStram文件输出流指向这个临时文件 FileOutputStream outputStream = new FileOutputStream(tempFile); byte b[] = new byte[1024]; int n; while(( n = fileSource.read(b)) != -1){ outputStream.write(b, 0, n); } //关闭输出流、输入流 outputStream.close(); fileSource.close(); } 把a.txt文件上传,此时Servlet会把它放在一个临时文件中保存,该文件除了文件本身信息还有上传时的状态信息.查看全部
-
文件上传后台实现:查看全部
-
将一个文件上传到服务器时,传递的信息不只是文件的内容本身,还会有其他的信息查看全部
-
上传实现思路(前端): 1.创建一个Servlet 2.表单中action提交到Servlet中,并且method属性为Post,enctype属性为multipart/form-data,即以字节流的形式上传文件. <form action="servlet/Servlet" enctype="multipart/form-data" method="post"> <input type="file" name="myfile" /> <input type="submit" value="提交"/> </form>查看全部
举报
0/150
提交
取消