全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

基于java文件上传-原始的Servlet方式

前言:干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的。刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感觉最不爽的时候,没有归属感,房租还不便宜,RT,不能好高骛远,还是脚踏实地一点一点学技术吧,终将有一日,工资会涨的。

java文件上传

传统的文件上传,不用jquery插件的话,就是用form表单提交,项目里用过uploadify,可以异步上传文件,原理我也没研究。现在说传统的form表单上传文件。

文件上传核心:

用<input type=”file”/> 来声明一个文件域。样式如 文件:_____ <浏览>.

必须使用post方式提交表单。

必须设置表单的类型为multipart/form-data.是设置这个表单传递的不是key=value值。传递的是字节码.

新建web项目:

jsp form表单:enctype(编码类型)的默认值就是 application/x-www-form-urlencoded

浏览器查看 http报文:主要参数:Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 接收服务器返回的类型,*/*表示所有。Referer:http://localhost:8888/upload/ 来自哪个网站Accept-Language:zh-CN,zh;q=0.8 :请求回应中首选的语言为简体中文Accept-Encoding:gzip, deflate, br支持的压缩格式User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36 用户浏览器类型Host:localhost:8888 主机地址Connection:keep-alive 报文发送完毕后仍然保持连接Cache-Contrp: max-age=0 缓存Content-Length: 41 41字节对文件上传来说,重要的参数是:Content-Type: application/x-www-form-urlencoded这个参数只有post请求才有,默认就是application/x-www-from-urlencoded ,Content-type表示正文类型,get方式没有正文,因为参数在url里。在Servlet里可以用request对象取到Content-type:request.getHeader("Content-type"); 默认的值为 application/x-www-form-urlencoded,如果是get请求,则 request.getHeader("Content-type");为null。下图是get请求时的http头信息:  

文件上传,必须设置enctype="multipart/form-data"
from表单:上传一个word:此时的http消息: Content-Type:multipart/form-data; boundary=----WebKitFormBou ndarywYwQ3v1NemO0bPfM 。
其中的 boundary=----WebKitFormBoundary44gVxAkoSg3tk3oR 指的是文件上传的分隔符。
看请求的报文: boundry=xxxxx 标识文件开始,也有文件头,说的是上传的数据的类型,第一个input 是text类型,第二个是二进制,content-type 是application/octet-stream 表示 二进制流。上传图片,Content-Type: image/jpeg,上传文本,Content-Type: text/plain。 二进制流的接收:当表单类型是post类型,切enctype="multipart/form-data",则所有的数据都是以二进制流的形式向服务器上传,所以request.getParameter("xxx") 永远为null,只能通过req.getInputStream(); 获取正文。上传一个txt:Servlet:

package com.lhy.upload;

import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 
 * @author Administrator
 *
 */
@WebServlet(name="UploadServlet",urlPatterns="/UploadServlet")
public class UploadServlet extends HttpServlet{

 @Override
 protected void doGet(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
//  this.doPost(req, resp);
 }

 @Override
 protected void doPost(HttpServletRequest req, HttpServletResponse resp)
   throws ServletException, IOException {
  
  req.setCharacterEncoding("UTF-8");
  String contentType = req.getHeader("Content-type");
  System.out.println("contentType: "+contentType);
  String name = req.getParameter("name");
  System.out.println(name);//null
  
  InputStream is = req.getInputStream();
  
  
//  ------WebKitFormBoundaryG0ULv7eVfQ1K2PBA
//  Content-Disposition: form-data; name="image"; filename="静夜思.txt"
//  Content-Type: text/plain
//
//
//  ------WebKitFormBoundaryG0ULv7eVfQ1K2PBA--
  BufferedReader br = new BufferedReader(new InputStreamReader(is));
  String firstLine = br.readLine();//第一行,分隔符
  String fileName = br.readLine();
//  Content-Disposition: form-data; name="image"; filename="jingyesi.txt"
  fileName = fileName.substring(fileName.lastIndexOf("=")+2,fileName.length()-1);
  
  br.readLine();
  br.readLine();
  String data = null;
  //获取当前项目的运行路径
  String path = getServletContext().getRealPath("/up");
  PrintWriter pw = new PrintWriter(path+"/"+fileName);
  while((data = br.readLine()) != null){
   if(data.equals(firstLine+"--")){
    break ; //读到了文件尾
   }
   pw.println(data);
  }
  pw.flush();
  pw.close();
  is.close();

  
  /* FileOutputStream fos = new FileOutputStream(path+"/"+"b.doc");
//  byte[] b = new byte[1024];
  int len = 0;
  while((len = is.read()) != -1){
   fos.write(len);
  }
  fos.flush();
  fos.close();
  is.close();*/
 }

 
}

项目里:

例子只是读取了txt,其他的二进制需要使用inputStream读取。

以上这篇基于java文件上传-原始的Servlet方式就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# java  # 文件上传方式  # JavaServlet的文件上传和下载实现方法  # Java Servlet简单实例分享(文件上传下载demo)  # java基于servlet编写上传下载功能 类似文件服务器  # Java Servlet上传图片到指定文件夹并显示图片  # java基于servlet实现文件上传功能解析  # java基于servlet的文件异步上传  # java基于servlet实现文件上传功能  # java基于servlet使用组件smartUpload实现文件上传  # java web中的servlet3 upload上传文件实践  # 简单操作实现Java jsp servlet文件上传过程解析  # JavaWeb servlet实现下载与上传功能的方法详解  # 表单  # 文件上传  # 上传  # 的是  # 给大家  # 上传文件  # 分隔符  # 来了  # 也有  # 简体中文  # 第一个  # 好高骛远  # 还不  # 可以用  # 几次  # 很有  # 其他的  # 希望能  # 第二个  # 才有 


相关文章: 建站之星体验版:智能建站系统+响应式设计,多端适配快速建站  香港服务器WordPress建站指南:SEO优化与高效部署策略  自助网站制作软件,个人如何自助建网站?  盐城做公司网站,江苏电子版退休证办理流程?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  ,如何利用word制作宣传手册?  建站主机如何安装配置?新手必看操作指南  Swift中循环语句中的转移语句 break 和 continue  php8.4新语法match怎么用_php8.4match表达式替代switch【方法】  网站制作多少钱一个,建一个论坛网站大约需要多少钱?  制作表格网站有哪些,线上表格怎么弄?  Swift中switch语句区间和元组模式匹配  MySQL查询结果复制到新表的方法(更新、插入)  电商网站制作公司有哪些,1688网是什么意思?  Android滚轮选择时间控件使用详解  建站之星后台密码遗忘或太弱?如何重置与强化?  香港服务器部署网站为何提示未备案?  如何在景安服务器上快速搭建个人网站?  郑州企业网站制作公司,郑州招聘网站有哪些?  ,制作一个手机app网站要多少钱?  建站之星与建站宝盒如何选择最佳方案?  网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  宝塔面板创建网站无法访问?如何快速排查修复?  微信推文制作网站有哪些,怎么做微信推文,急?  南宁网站建设制作定制,南宁网站建设可以定制吗?  小建面朝正北,A点实际方位是否存在偏差?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  宝塔Windows建站如何避免显示默认IIS页面?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析  建站之星会员如何解锁更多建站功能?  网站制作难吗安全吗,做一个网站需要多久时间?  建站之星安装后如何配置SEO及设计样式?  再谈Python中的字符串与字符编码(推荐)  魔方云NAT建站如何实现端口转发?  黑客如何利用漏洞与弱口令入侵网站服务器?  如何制作算命网站,怎么注册算命网站?  建站主机服务器选型指南与性能优化方案解析  零基础网站服务器架设实战:轻量应用与域名解析配置指南  建站OpenVZ教程与优化策略:配置指南与性能提升  如何在建站之星网店版论坛获取技术支持?  建站之星如何一键生成手机站?  重庆市网站制作公司,重庆招聘网站哪个好?  潮流网站制作头像软件下载,适合母子的网名有哪些?  如何在橙子建站中快速调整背景颜色?  建站DNS解析失败?如何正确配置域名服务器?  广东专业制作网站有哪些,广东省能源集团有限公司官网?  ,怎么在广州志愿者网站注册?  如何在万网开始建站?分步指南解析 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。