java的upload

好久没写java的东西了
遇到个服务器,不是标准的httpServletRequest
不能使用common-upload组件
悲催了
要解析

原来request.getInputStream()是这样搞的啊

Map<String, String> formfieldsTable = new HashMap<String, String>();
String fileRealName = ""; // 上传文件的真实名字
String length="";//长度
try {

response.setContentType("text/html;charset=UTF-8");
//PrintWriter out = response.getWriter();
final int NONE = 0; // 状态码,表示没有特殊操作
final int DATAHEADER = 1; // 表示下一行要读到报头信息
final int FILEDATA = 2; // 表示下面要读的是上传文件和二进制数据
final int FIELDDATA = 3; // 表示下面要读到表单域的文本值
// 请求消息实体的总长度(请求消息中除消息头之外的数据长度)
int totalbytes = request.getContentLength();
File f; // 上传文件储存在服务器上
// 容纳请求消息实体的字节数组
byte[] dataOrigin = new byte[totalbytes];
// 对于post多个文件的表单,b作为原始数据的副本提供提取文件数据的操作
byte[] b = new byte[totalbytes];
// 请求消息类型
String contentType = request.getContentType();
String fieldname = ""; // 表单域的名称
String fieldvalue = ""; // 表单域的值
String fileFormName = ""; // 上传的文件再表单中的名称

String boundary = ""; // 分界符字符串
String lastboundary = ""; // 结束分界符字符串
int fileSize = 0; // 文件长度
// 容纳表单域的名称/值的哈希表

// 容纳文件域的名称/文件名的哈希表
Map<String, String> filenameTable = new HashMap<String, String>();
// 在消息头类型中找到分界符的定义
int pos = contentType.indexOf("boundary=");
int pos2; // position2
if (pos != -1) {
pos += "boundary=".length();
boundary = "--" + contentType.substring(pos); // 解析出分界符
lastboundary = boundary + "--"; // 得到结束分界符
}
int state = NONE; // 起始状态为NONE
// 得到请求消息的数据输入流
DataInputStream in = new DataInputStream(request.getInputStream());
in.readFully(dataOrigin); // 根据长度,将消息实体的内容读入字节数组dataOrigin中
in.close(); // 关闭数据流
String reqcontent = new String(dataOrigin); // 从字节数组中得到表示实体的字符串
// 从字符串中得到输出缓冲流
BufferedReader reqbuf = new BufferedReader(new StringReader(
reqcontent));
// 设置循环标志
boolean flag = true;
// int i = 0;
while (flag == true) {
String s = reqbuf.readLine();
if (s == lastboundary || s == null)
break;
switch (state) {
case NONE:
if (s.startsWith(boundary)) {
// 如果读到分界符,则表示下一行一个头信息
state = DATAHEADER;
// i += 1;
}
break;
case DATAHEADER:
pos = s.indexOf("filename=");
// 先判断出这是一个文本表单域的头信息,还是一个上传文件的头信息
if (pos == -1) {
// 如果是文本表单域的头信息,解析出表单域的名称
pos = s.indexOf("name=");
pos += "name=".length() + 1; // 1表示后面的"的占位
s = s.substring(pos);
int l = s.length();
s = s.substring(0, l - 1); // 应该是"
fieldname = s; // 表单域的名称放入fieldname
System.out.print("fieldname=" + fieldname);
state = FIELDDATA; // 设置状态码,准备读取表单域的值
} else {
// 如果是文件数据的头,先存储这一行,用于在字节数组中定位
String temp = s;
// 先解析出文件名
pos = s.indexOf("name=");
pos += "name=".length() + 1; // 1表示后面的"的占位
pos2 = s.indexOf("filename=");
String s1 = s.substring(pos, pos2 - 3); // 3表示";加上一个空格
fileFormName = s1;
pos2 += "filename=".length() + 1; // 1表示后面的"的占位
s = s.substring(pos2);
int l = s.length();
s = s.substring(0, l - 1);
pos2 = s.lastIndexOf("\\"); // 对于IE浏览器的设置
s = s.substring(pos2 + 1);
fileRealName = s;
System.out.print("fileRealName=" + fileRealName + "<br>");
System.out.print("fileRealName.length()="
+ fileRealName.length() + "<br>");
if (fileRealName.length() != 0) { // 确定有文件被上传
// 下面这一部分从字节数组中取出文件的数据
b = dataOrigin; // 复制原始数据以便提取文件
pos = byteIndexOf(b, temp, 0); // 定位行
// 定位下一行,2 表示一个回车和一个换行占两个字节
b = subBytes(b, pos + temp.getBytes().length + 2,
b.length);
// 再读一行信息,是这一部分数据的Content-type
s = reqbuf.readLine();
// 设置文件输入流,准备写文件
f = new File(
"/usr/local/app/author_portal_front/upload"
+ File.separator + fileRealName);
DataOutputStream fileout = new DataOutputStream(
new FileOutputStream(f));
// 字节数组再往下一行,4表示两回车换行占4个字节,本行的回车换行2个字节,Content-type的下
// 一行是回车换行表示的空行,占2个字节
// 得到文件数据的起始位置
b = subBytes(b, s.getBytes().length + 4, b.length);
pos = byteIndexOf(b, boundary, 0); // 定位文件数据的结尾
b = subBytes(b, 0, pos - 1); // 取得文件数据
length=b.length+"";
fileout.write(b, 0, b.length - 1); // 将文件数据存盘
fileout.close();
fileSize = b.length - 1; // 文件长度存入fileSize
System.out.print("fileFormName=" + fileFormName
+ " filename=" + fileRealName
+ " fileSize=" + fileSize + "<br>");
filenameTable.put(fileFormName, fileRealName);
state = FILEDATA;
}
}
break;
case FIELDDATA:
// 读取表单域的值
s = reqbuf.readLine();
fieldvalue = s; // 存入fieldvalue
System.out.print(" fieldvalue=" + fieldvalue + "<br>");
formfieldsTable.put(fieldname, fieldvalue);
state = NONE;
break;
case FILEDATA:
// 如果是文件数据不进行分析,直接读过去
while ((!s.startsWith(boundary))
&& (!s.startsWith(lastboundary))) {
s = reqbuf.readLine();
if (s.startsWith(boundary)) {
state = DATAHEADER;
} else {
break;
}
}
break;
}
}
} catch (Exception e) {
System.out.println("error upload:" + e);
e.printStackTrace();
}
String abc=GetTest.testGet("/usr/local/app/author_portal_front/upload/"+fileRealName , formfieldsTable.get("myname"),length);
System.out.println("------------->uploadUrl:"+abc);
request.setAttribute("intro", abc);
Vue使用element组件el-upload手写axios上传图片到后端java接口,数据用Formdata传递。 使用element组件el-upload手写axios上传图片到后端java接口,数据用Formdata传递。 前端代码: action这里随便写个地址就行,因为我们是自己手写上传不用elment自带的东西(别问我为什么不用element自带的,我是自学的弄会啥算啥!),这块基本上就是直接复制的官方文档没什么多说的。 vue js代码: 这里的1是新建一个formdata对象用来存数据,4的位置... 阅读详情

相关推荐

Upload.java

//上传 @RequestMapping("add") public String add(HttpServletRequest request,User user,MultipartFile file){ String tp = Upload.upload(file); if(""!=tp){ user.setimg(tp); } ud.add(gs); return "redirect:list";//return ""; 后面的值对应的是页面的名称 }

Java使用FileUpload实现文件的上传

一、文件上传的介绍 1.文件上传的实质:文件的拷贝 文件上传:从本地将文件拷贝到服务器磁盘上 客户端:需要编写文件上传表单 服务端:需要编写代码接收上传的文件 二、客户端编码 1.文件上传三要素 表单的提交方式:post(get方式提交数据有大小限制) 表达的enctype属性值:必须设置为 multipart/form-data multipart/form-data:多部件文件上传,指表单数据有多部分构成。 既可以有文本数据,也可以有文件等二进制数据。 表单中必须有文件上传项:file,必须

weixin_48893653的博客 4890

java上传文件(upload)

java运用jsmartcom.jar控件可以很方便的上传文件支持中文!

upload在java中_java的upload

Map formfieldsTable = new HashMap();String fileRealName = ""; // 上传文件的真实名字String length="";//长度try {response.setContentType("text/html;charset=UTF-8");//PrintWriter out = response.getWriter();final in...

weixin_35080040的博客 921

HTTPDebugger实战:iTunes登录协议抓包与签名验证全解析

HTTPS抓包是分析客户端与服务端交互的重要手段,其原理是通过中间人证书解密TLS流量,从而观察请求与响应细节。在调试iTunes登录协议时,抓包能帮助我们定位签名验证失败、x-timestamp过期等棘手问题。然而,许多教程中常见的mumu模拟器抓包、fiddler手机抓包或charles抓包unknown问题,往往让新手陷入工具陷阱。本文以HTTPDebugger为切入点,从TLS握手到认证请求,系统拆解iTunes登录协议的关键字段与签名机制,覆盖证书配置、进程监听、域名过滤等实战经验,辅以Apple

weixin_30768881的博客 194

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

[Spawn service failed. Exiting] ROS2运行turtlebot3_gazebo例程卡住_报错

Feizhai2的博客 4860

JavaWeb文件上传的实现及FileUpload

本片文章主要讲解了Servlet实现文件的上传功能,简单讲解了FileUpload相关类的介绍与使用

weixin_71639702的博客 502

FPGA矩阵键盘计算器Verilog实现与Quartus仿真全流程解析

本文详细解析了基于FPGA和Verilog的矩阵键盘计算器实现全流程,包括矩阵键盘扫描、状态机设计、算术运算逻辑及数码管显示驱动。通过Quartus仿真与Testbench测试,确保设计稳定性与准确性,适合数字逻辑设计初学者学习FPGA开发与硬件描述语言应用。

chair的专栏 742

【Java之FileUpload】

思路:在具体分发的处理方法中,传入一个map对象,用于保存键值对,键可以设置为JAVA Bean中的属性名,值设置为一个object,用于保存具体的参数类型;此时注意,由于设置了enctype=multipart/form-data导致请求体报文的格式改变,那么就不能使用普通的读取方式了,否则会导致在二进制文件中写入字符而报错。item实际上就是input中上传的文本参数或者是文件,根据不同的文件来实现具体的业务逻辑,分发给不同的方法来进行处理。首先需要判断请求是否包含上传的文件,否则使用该组件没有意义。

bigcoding的博客 1188

4090显卡实测:PointPillars在KITTI数据集上的3D目标检测复现全流程(附避坑指南)

本文详细记录了在NVIDIA RTX 4090显卡上,从环境搭建、数据处理到模型训练与评估,完整复现PointPillars算法在KITTI数据集上进行3D目标检测的全流程。重点分享了版本配置、数据预处理、性能调优及常见问题的避坑指南,帮助开发者高效利用硬件资源,成功跑通并理解这一经典3D检测项目。

purple的博客 914

keras tensorflow 的lstm的新冠疫情感染人数预测 附完整代码数据 可直接运行

keras tensorflow 的lstm的新冠疫情感染人数预测 附完整代码数据 可直接运行

847

java upload 上传

1.文件上传 jsp&lt;div id="import-dialog" class="easyui-dialog"data-options="closed:true,iconCls:'icon-save'"style="width: 400px; padding: 10px;"&gt;&lt;form id="import-form" method="post"

秋秋的博客 474

MATLAB算法实战应用案例精讲-【数模应用】校准曲线(附MATLAB、python和R语言代码实现)

模型校准曲线(Calibration Curve),也称为可靠性曲线(Reliability Curve)或概率校准曲线(Probability Calibration Curve),是一种评估分类模型输出概率准确性的图形工具。它可以帮助我们理解模型的预测概率是否与实际标签的分布一致。校准曲线通常包括以下步骤:计算模型预测概率:对于测试集中的每个样本,模型会输出一个概率值,表示样本属于正类的概率。将数据分桶:将这些概率值分成若干个等宽的桶(例如10个桶),每个桶中的样本具有相似的预测概率。

qq_36130719的博客 556

关于java中http上传组件Upload的使用

对原来的Upload又重新用JDK1.5重写了一次.因为JDK已经发布1.6了,如果你还在用1.4,那你只好自己根据我的思路翻译了.这个Bean最初是我在2002年写的(在此之前的文章当然是别人的原创),然后网上就出了很多修改一些变量名,方法名或类名的各种版本,当然"版权"也就成了这些修改者的了.2002年我的原文在cnJBB上,可以在那儿搜索到.对这个Bean使用是非常简单.下面提供测试的代码.

诗剑书生的专栏 5945

用 ADT 连接 SAP S/4HANA Public Cloud 开发租户的完整落地指南

摘要:在SAP S/4HANA公有云中进行ABAP开发时,必须使用Development Tenant(客户端080)而非Customizing Tenant(客户端100)连接ADT工具。开发用户需具备SAP_BR_DEVELOPER角色且写权限不受限,开发对象应创建在结构包的子包中。连接前需确认正确的ABAP服务URL(通常为Launchpad URL去掉"/ui"),并通过运行控制台程序验证全链路功能。典型开发场景如通过BAdI实现业务校验时,需遵循Clean Core原则在指定包

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 335

uniapp - 热更新提示:WGT安装包中manifest.json文件不存在 | unexpected EOF!报错详细解决,完美搞定WGT安装包中WWW目录下manifest.json不存在问题

uniapp,安卓android,苹果ios,热更新,热更新code:-1202报错,,WGT热更新报错,uniapp热更新wgt出现报错manifest.json文件不存,uniapp安卓苹果软件热更新时出现错误unexpected EOF!如何解决,怎么解决热更新wgt报错,app新版本下载安装报错WGT安装包中manifest.json文件不存在,WGT安装包中WWW目录下manifest.json不存在,uniapp热更新报错安装失败[-1201]:WGT/WGTU文件格式错误,uniapp-wgt

✅ 精选推荐文章 1万+

nginx upload java_nginx upload在java中的应用

1.Nginx上传介绍文件在POST上传到nginx服务器时,nginx会自己将这个文件先保存下来,然后再往后端发送。在这个过程中,文件会被保存成一个临时文件,待文件传送完成后,nginx向后端(如resin)通知临时文件的文件信息(如上传文件原有的文件名、存在本地磁盘哪个目录下、临时文件名、文件的md5、文件的类型、文件的大小等)。后端服务拿到这个文件名可以直接读取缓存的文件,进行迁移转码等后续...

weixin_39912163的博客 283

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

aliyun-java-vod-upload引入失败解决

失败原因:阿里并未将当前jar包开源,要自行去官网下载,并安装进maven库中 下载安装jar包 下载地址:https://help.aliyun.com/document_detail/51992.html#title-mbq-hhb-gy2 完成下载后解压进lib目录,找到aliyun-java-vod-upload-1.4.14.jar 将 jar 包复制到Maven的 bin 目录下 全选地址栏输入cmd,打开命令行界面 输入命令: mvn install:i......

初栀的博客 5525

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Maven导入aliyun-java-vod-upload包依赖失败

去官网下载 demo网址。或者使用下面地址下载。

2301_81426796的博客 1442

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

aliyun-java-vod-upload依赖安装问题

aliyun-java-vod-upload依赖安装问题 首先找到 maven依赖下载位置 然后找到依赖对应的位置 然后官网下载aliyun-java-vod-upload-版本.jar 然后解压找到并打开lib(也就是对应jar包的文件夹)用cmd打开cmd.exe窗口输入下面命令 注意:版本号要与下载jar包版本号一致 mvn install:install-file -DgroupId=com.aliyun -DartifactId=aliyun-java-vod-upload -Dversion

weixin_52779958的博客 832

Spring Cloud 05 --- aliyun-java-vod-upload和aliyun-sdk-vod-upload报红

Spring Cloud 05 --- aliyun-java-vod-upload和aliyun-sdk-vod-upload报红,阿里云视频点播所需依赖

qq_45800365的博客 722

已解决:阿里云OSS——aliyun-java-vod-upload 依赖报错

@[toc] ## 错误描述; 1. 使用阿里云oss时,引入的依赖aliyun-java-vod-upload报错,导致这个依赖报错的原因时因为阿里没有把这个依赖的包开源(需要我们下载阿里云的官方样例并且手动生成这个包,) ![在这里插入图片描述](https://img-blog.csdnimg.cn/dbc37966788c4e118156d11dd3a1bcd3.png) 2. 从阿里官网下载的样例包是 VODUploadDemo-java-1.4.15 (上传到我的资源里面了) ## 解决ali

qq_43408367的博客 2352

uniapp上传图片使用组件Upload+java后端代码

uniapp上传图片使用组件Upload+java后端代码 #效果展示 ##数据库展示 ##本地展示 网页展示 代码展示 前端 uniapp <!-- 单张图片 --> <!-- <u-upload v-model="form.attachment" ref="uUpload" :file-list="fileList" :action="action" accept="image" :max-size="2 * 1024 * 1024" @oversize="oversiz

zsp_0207的博客 3488

阿里云未开源jar包aliyun-java-vod-upload-1.4.11.jar的导入

最近在做谷粒学院的在线教育项目,导入aliyun-java-vod-upload坐标就是报红,找了很多帖子都无效。愿这些这些人少将错误的帖子复制到自己的帖子中,话不多说直接开始解决: 文章底部有谷粒在线教育的所有资料以及老师的仓库[因为老师的仓库也没下完,我是把我下完了的重新压缩了的! 通过maven依赖导入aliyun-java-vod-upload aliyun-java-vod-upload没有开源,所以不能直接在pom文件中直接引入依赖。 解决:到阿里云官网去下载对应的demo然后in.

qq_45441466的博客 9752

java upload

在我们的web开发中,很多的时候都需要把本机的一些文件上传到web服务器上面去 如:一个BBS系统,当用户使用这是系统的时候,能把本机的一些图片,文档上传到服务器 上面去。然后其他用户可以去下载这些文件,那么这样的话,我们可以自己编程实现文件的上传 但是更好的方式是使用一些已有的组件帮助我们实现这种上传功能。 --------------------------------------

yyfpeak的专栏 621
上一篇: 单向链表翻转
下一篇: 30天自制操作系统笔记
linux内核控
博客等级 码龄19年 41粉丝 638原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值