表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form- data,才能完整的传递文件数据,进行下面的操作.
enctype=\"multipart/form-data\"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,即不能用request.getParameter()来获取到各个表单元素的值的
例子如下:
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Enumeration;
import java.util.Hashtable;
/**
* java 模拟 ENCTYPE="multipart/form-data"方式
* 提交FORM
* */
public class MultipartPOST {
/**
* @param args
*/
public static void main(String[] args) {
URL url = null;
HttpURLConnection httpurlconnection = null;
try
{
/**
* multipart/form-data 分隔符(boundary)是必须的.
* ----multipartPostRequestMCUServer 是分隔符,分隔多个文件、表单项
* */
url = new URL("http://10.50.8.225:80/mcu");
String boundary = "----multipartPostRequestMCUServer";
httpurlconnection = (HttpURLConnection) url.openConnection();
httpurlconnection.setDoOutput(true);
httpurlconnection.setRequestMethod("POST");
httpurlconnection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
/*put the data from the FORM into a Hashtable*/
Hashtable<String,String> hashtable = new Hashtable<String,String>();
hashtable.put("peername", "10");
hashtable.put("operation", "login");
String boundaryMessage = getBoundaryMessage(boundary,hashtable,"","","");
String endBoundary = "\r\n--" + boundary + "--\r\n";
System.out.println( boundaryMessage);
OutputStream dout = httpurlconnection.getOutputStream();
dout.write(boundaryMessage.getBytes());
dout.write(endBoundary.getBytes());
dout.flush();
dout.close();
int code = httpurlconnection.getResponseCode();
System.out.println("-------code " + code);
InputStream is = httpurlconnection.getInputStream();
try {
byte[] buffer = new byte[1024];
@SuppressWarnings("unused")
int len = -1;
while ((len = is.read(buffer)) != -1) {
System.out.println(new String(buffer));
}
} finally {
is.close();
}
}catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (httpurlconnection != null)
httpurlconnection.disconnect();
}
}
@SuppressWarnings("unchecked")
static String getBoundaryMessage(String boundary, Hashtable params, String fileField, String fileName, String fileType)
{
StringBuffer res = new StringBuffer("--").append(boundary).append("\r\n");
Enumeration keys = params.keys();
while(keys.hasMoreElements())
{
String key = (String)keys.nextElement();
String value = (String)params.get(key);
res.append("Content-Disposition: form-data; name=\"").append(key).append("\"\r\n")
.append("\r\n").append(value).append("\r\n")
.append("--").append(boundary).append("\r\n");
}
if(fileField != null && !"".equals(fileField) && fileName != null && !"".equals(fileName) && fileType!=null&&!"".equals(fileType) ){
res.append("Content-Disposition: form-data; name=\"").append(fileField).append("\"; filename=\"").append(fileName).append("\"\r\n")
.append("Content-Type: ").append(fileType).append("\r\n\r\n");
}
return res.toString();
}
}
分享到:
相关推荐
在探讨“解决当FORM的ENCTYPE='multipart/form-data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过...
标题提到的“上传文件fileupload+解决enctype= multipart/form-data无法传递其他参数”是一个常见的技术挑战,特别是当使用HTML表单进行文件上传时。`multipart/form-data`是用于处理包含二进制数据(如文件)的表单...
在Java Web开发中,我们经常遇到表单提交数据的情况,特别是涉及到文件上传时,`<form>`标签的`ENCTYPE`属性通常会被设置为`multipart/form-data`。这是因为`multipart/form-data`允许在请求中携带二进制数据,如...
servlet上传 enctype="multipart/form-data" servlet上传 enctype="multipart/form-data
### 解决Java enctype "multipart/form-data" 文件上传传值问题 在Java Web开发中,处理文件上传是一项常见的任务。特别是当涉及到使用`multipart/form-data`作为表单的编码类型时,这种需求更为突出。本文将深入...
<form method="POST" id='form2' name='form2' action="${weiboPublictUrl}" ENCTYPE="multipart/form-data"> <input type="file" name="uploadPath" id="uploadPath" size="62" maxlength="3"/> <textarea id=...
目前,各种第三方应用平台和云服务平台都提供了对multipart/form-data的支持,如阿里云、腾讯云、七牛云、青云等。这些平台都提供了RESTful API供开发者调用,以上传或下载业务数据进行业务开发。 (五)总结 C# ...
我们都知道要让form能提交文件,需要在form上指定enctype=multipart/form-data的attribute,这样才能上传文件,关于enctype的文章很多,就不再做解释。 问题是因为使用了MVC的Html.BeginForm()来输出表单代码,默认...
值得一提的是,在HTML中,表单上传文件时必须设置其enctype属性为multipart/form-data,因为默认值是application/x-www-form-urlencoded,这不支持文件上传。 JavaScript中,XMLHttpRequest Level 2引入了FormData...
本文介绍了Node Js 使用KOA处理form-data格式传输过来的文件,分享给大家。...form表单【注意:enctype=”multipart/form-data”】上传文件时,首先会将文件上传到你本机的temp目录,然后执行move_upload_file
multipart/form-data是另一种常用的编码格式,它将窗体数据编码为一条消息,页上的每个控件对应消息中的一个部分。这种编码格式可以上传文件,并且可以处理复杂的数据结构。 在实际开发中,我们需要根据具体情况...
2. **multipart/form-data**:当需要上传文件时,表单的`enctype`属性应设为`multipart/form-data`。这种方式将数据分割成多个部分,每个部分都有一个边界标识,这样可以同时发送文本和二进制数据(如图片)。每个...
阿贾克斯形式这是一个js事件监听器,可让您以最简单的方式使用ajax提交任何表单。 只需将类“ .ajax_form”添加到您的表单中,瞧,您的表单将开始... 只需将常规enctype =“ multipart / form-data”包含在表单元素中
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file1" /> <input type="file" name="file2" /> <!-- 可以有更多input文件域 --> <input type="submit" value=...
控件,form 表单需要设置 enctype=”multipart/form-data” 属性。比如: <body> <form action=UploadFile.php method=post enctype=multipart/form-data> <input type=file name=fileUpload /&...
Java SSH(Struts2、Spring、Hibernate)是一个常见的企业级应用开发框架组合,用于构建高效、可维护的Web应用程序。SSH框架的结合使得开发者能够利用Struts2的MVC设计模式,Spring的依赖注入和事务管理,以及...
form action= method=post enctype=multipart/form-data> 修改头像 <input type=file name=file></p> <p><input type=submit value=提交></p> </form> manage.py #文件上传的视图
在Java编程领域,上传图片是一项常见的任务,广泛应用于各种Web应用程序,如社交网络、电子商务平台和个人博客等。...<form action="upload" method="POST" enctype="multipart/form-data"> <input type="file" n