最近几天在做文件上传的时候,使用enctype="multipart/form-data"时,在spring的controller里面没有像struts那样的Formfile之类封装好的类,可以直接拿到此类form里面的值。也许你会说用第三方jar来解决呀,是啊,像commons-fileupload.jar,SmartUpload我用过,确实好用啊,可是,这样就算完了?怎么实现的? 我不用它自己写不行吗?不就是个文件上传嘛!
在网上查了下,才知道浏览器Post的过来到controller的不像平时普通提交表单时用getParameter()方法就能拿到,而是一个流ServletInputStream。通过firebug可以清楚的看到post的数据格式:
--(随即生成数字或字母)
Content-Disposition: form-data; name="title"
(回车)
值
--(随即生成数字或字母)
Content-Disposition: form-data; name="1.txt"; filename="C:\1.txt"
Content-Type: text/plain
回车
文件内容
--(随即生成数字或字母)--
回车
这不就行了,既然知道了流的格式,自己构造数组来存入流数据不就行了。
//我定义的数组m_binArray
this.m_totalBytes = this.m_request.getContentLength();
this.m_binArray = new byte[this.m_totalBytes];
ServletInputStream sis = this.m_request.getInputStream();
int i=0;
int j=0;
for (; i < this.m_totalBytes; i += j)
{
try {
/* 尝试将流写入数组:从数组的i索引开始,并读取一定长度的流,该长度可能会比计划长度小
* 返回实际读取的字节数。有人说用readline效率会高,我没试也不便评论
*/
j = sis.read(this.m_binArray, i, this.m_totalBytes-i);
System.out.println(new String(this.m_binArray,i,j));
}
catch (Exception exception)
{
e.printStackTrace();
}
}
这样你可以在控制台上看到如上我说的那种格式数据,下面就可以自己解析了。附件代码是我项目中用到的上传类。
这是我第一次发博,以前只是看,“拿”,现在也贡献一下,呵呵。
分享到:
相关推荐
在提供的压缩包文件"C#_multipartform_data示例"中,可能包含了这样的示例代码,我们可以从中学习如何在C#环境中实现文件上传或其他多部分数据传输。 通过理解以上知识点和查看示例代码,我们可以深入理解`...
在处理含有文件上传的`multipart/form-data`编码的表单时,使用`request.getParameter()`方法将不再适用,因为它们不能正确解析多部分数据流。相反,引入Apache Commons FileUpload库提供了强大的功能,不仅能够解析...
用C语言实现multipart/form-data文件上传,没有用到curl之类的库。之前做个小的日志上传程序写的。
标题提到的“上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数”是一个常见的技术挑战,特别是当使用HTML表单进行文件上传时。`multipart/form-data`是用于处理包含二进制数据(如文件)的表单...
当我们需要上传文件或同时发送键值对(包括复杂的数据结构如JSON)时,通常会使用`multipart/form-data`和JSON这两种数据格式。下面我们将深入探讨如何在C#中实现这两种数据格式的POST请求。 一、`multipart/form-...
在IT行业中,C#是一种广泛使用的编程语言,尤其在开发Windows应用程序、Web...通过使用Json.NET库处理JSON数据,以及HttpClient类处理multipart/form-data数据,你可以轻松地与各种API进行交互,实现文件上传等功能。
综上所述,WebAPIFileUploadDemo项目为理解并实现基于`multipart/form-data`的文件和数据上传提供了一个基础模板。它展示了从客户端构建请求到服务器端解析和处理数据的完整流程,帮助开发者在实际项目中实现类似...
总的来说,Delphi 7 使用 Indy 10 的 `TIdHTTP` 控件和 `TIdMultipartFormDataStream` 类可以方便地实现 `multipart/form-data` 方式的文件上传。理解这些组件的工作原理和使用方法,对于开发涉及文件交互的Web应用...
在实际项目中,这样的应用可能会用到上述的`multipart/form-data`(用于上传文件)和JSON(用于传递用户信息或文件元数据)技术。 总的来说,理解和熟练运用`multipart/form-data`和JSON数据格式在C#中的处理,对于...
使用c#实现的HttpClient拼接multipart/form-data形式参数post提交数据,包含图片内容,有需要的可以下载,希望能帮到有需要的人,
在Java Web开发中,我们经常遇到表单提交数据的情况,特别是涉及到文件上传时,`<form>`标签的`ENCTYPE`属性通常会被设置为`multipart/form-data`。这是因为`multipart/form-data`允许在请求中携带二进制数据,如...
由于有 boundary 隔离,所以 multipart/form-data 既可以上传文件,也可以上传键值对,它采用了键值对的方式,所以可以上传多个文件。 (二)multipart/form-data的详细格式 multipart/form-data的详细格式可以分为...
### 解决Java enctype "multipart/form-data" 文件上传传值问题 在Java Web开发中,处理文件上传是一项常见的任务。特别是当涉及到使用`multipart/form-data`作为表单的编码类型时,这种需求更为突出。本文将深入...
这个表单使用`POST`方法,并且使用了`multipart/form-data`作为其`enctype`属性值,这表明该表单可以用来上传文件。 #### 标签解析 - **multipart/form-data**:如上所述,这是一种特定的表单数据编码类型,用于...
在处理表单数据时,PHP经常使用`multipart/form-data`编码方式,尤其是当上传文件时。然而,这种编码方式可能存在安全风险,其中之一就是PHP的multipart/form-data远程DoS(拒绝服务)漏洞。 在`multipart/form-...
在本场景中,提到的是针对multipart/form-data类型的上传请求进行的远程DoS攻击。multipart/form-data是HTTP协议中用于表单数据上传的一种格式,通常用于文件上传。 在Web开发中,服务器端需要正确处理这种类型的...
在Android平台上,实现图片上传通常涉及使用HTTP协议中的multipart/form-data请求类型,这是处理表单数据,特别是上传文件的标准方式。multipart/form-data允许我们在请求体中包含多个部分,每个部分可以是不同的...
当使用`multipart/form-data`时,浏览器会为每个表单字段创建一个单独的部分,包括文件上传字段。每个部分都会有一个唯一的分隔符(boundary),用于在请求体中划分不同的部分。这样,即使包含二进制文件,也能安全...