java通过模拟post方式提交表单实现图片上传功能实例
本文实例讲述了java通过模拟post方式提交表单实现图片上传功能。分享给大家供大家参考,具体如下:
模拟表单html如下:
<formaction="up_result.jsp"method="post"enctype="multipart/form-data"name="form1"id="form1"> <label> <inputtype="text"name="name"value=""/> </label> <label> <inputtype="file"name="userfile"/> </label> <label> <inputtype="submit"value="上传"/> </label> </form>
java代码如下:
packagecom.yanek.util;
importjava.io.BufferedReader;
importjava.io.DataInputStream;
importjava.io.DataOutputStream;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
importjava.net.HttpURLConnection;
importjava.net.URL;
importjava.util.HashMap;
importjava.util.Iterator;
importjava.util.Map;
importjavax.activation.MimetypesFileTypeMap;
importnet.sf.json.JSONArray;
importnet.sf.json.JSONObject;
publicclassHttpPostUploadUtil{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Stringfilepath="E:\\ziliao\\0.jpg";
StringurlStr="http://127.0.0.1:8080/minicms/up/up_result.jsp";
Map<String,String>textMap=newHashMap<String,String>();
textMap.put("name","testname");
Map<String,String>fileMap=newHashMap<String,String>();
fileMap.put("userfile",filepath);
Stringret=formUpload(urlStr,textMap,fileMap);
System.out.println(ret);
}
/**
*上传图片
*
*@paramurlStr
*@paramtextMap
*@paramfileMap
*@return
*/
publicstaticStringformUpload(StringurlStr,Map<String,String>textMap,
Map<String,String>fileMap){
Stringres="";
HttpURLConnectionconn=null;
StringBOUNDARY="---------------------------123821742118716";//boundary就是request头和上传文件内容的分隔符
try{
URLurl=newURL(urlStr);
conn=(HttpURLConnection)url.openConnection();
conn.setConnectTimeout(5000);
conn.setReadTimeout(30000);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection","Keep-Alive");
conn
.setRequestProperty("User-Agent",
"Mozilla/5.0(Windows;U;WindowsNT6.1;zh-CN;rv:1.9.2.6)");
conn.setRequestProperty("Content-Type",
"multipart/form-data;boundary="+BOUNDARY);
OutputStreamout=newDataOutputStream(conn.getOutputStream());
//text
if(textMap!=null){
StringBufferstrBuf=newStringBuffer();
Iteratoriter=textMap.entrySet().iterator();
while(iter.hasNext()){
Map.Entryentry=(Map.Entry)iter.next();
StringinputName=(String)entry.getKey();
StringinputValue=(String)entry.getValue();
if(inputValue==null){
continue;
}
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition:form-data;name=\""
+inputName+"\"\r\n\r\n");
strBuf.append(inputValue);
}
out.write(strBuf.toString().getBytes());
}
//file
if(fileMap!=null){
Iteratoriter=fileMap.entrySet().iterator();
while(iter.hasNext()){
Map.Entryentry=(Map.Entry)iter.next();
StringinputName=(String)entry.getKey();
StringinputValue=(String)entry.getValue();
if(inputValue==null){
continue;
}
Filefile=newFile(inputValue);
Stringfilename=file.getName();
StringcontentType=newMimetypesFileTypeMap()
.getContentType(file);
if(filename.endsWith(".png")){
contentType="image/png";
}
if(contentType==null||contentType.equals("")){
contentType="application/octet-stream";
}
StringBufferstrBuf=newStringBuffer();
strBuf.append("\r\n").append("--").append(BOUNDARY).append(
"\r\n");
strBuf.append("Content-Disposition:form-data;name=\""
+inputName+"\";filename=\""+filename
+"\"\r\n");
strBuf.append("Content-Type:"+contentType+"\r\n\r\n");
out.write(strBuf.toString().getBytes());
DataInputStreamin=newDataInputStream(
newFileInputStream(file));
intbytes=0;
byte[]bufferOut=newbyte[1024];
while((bytes=in.read(bufferOut))!=-1){
out.write(bufferOut,0,bytes);
}
in.close();
}
}
byte[]endData=("\r\n--"+BOUNDARY+"--\r\n").getBytes();
out.write(endData);
out.flush();
out.close();
//读取返回数据
StringBufferstrBuf=newStringBuffer();
BufferedReaderreader=newBufferedReader(newInputStreamReader(
conn.getInputStream()));
Stringline=null;
while((line=reader.readLine())!=null){
strBuf.append(line).append("\n");
}
res=strBuf.toString();
reader.close();
reader=null;
}catch(Exceptione){
System.out.println("发送POST请求出错。"+urlStr);
e.printStackTrace();
}finally{
if(conn!=null){
conn.disconnect();
conn=null;
}
}
returnres;
}
}
希望本文所述对大家Java程序设计有所帮助。