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程序设计有所帮助。