本文实例讲述了java通过模拟post方式提交表单实现图片上传功能。分享给大家供大家参考,具体如下:
模拟表单html如下:
<form action=\"up_result.jsp\" method=\"post\" enctype=\"multipart/form-data\" name=\"form1\" id=\"form1\"> <label> <input type=\"text\" name=\"name\" value=\"\" /> </label> <label> <input type=\"file\" name=\"userfile\" /> </label> <label> <input type=\"submit\" value=\"上传\" /> </label> </form>
java代码如下:
package com.yanek.util;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import javax.activation.MimetypesFileTypeMap;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class HttpPostUploadUtil {
/**
* @param args
*/
public static void main(String[] args) {
String filepath=\"E:\\\\ziliao\\\\0.jpg\";
String urlStr = \"http://127.0.0.1:8080/minicms/up/up_result.jsp\";
Map<String, String> textMap = new HashMap<String, String>();
textMap.put(\"name\", \"testname\");
Map<String, String> fileMap = new HashMap<String, String>();
fileMap.put(\"userfile\", filepath);
String ret = formUpload(urlStr, textMap, fileMap);
System.out.println(ret);
}
/**
* 上传图片
*
* @param urlStr
* @param textMap
* @param fileMap
* @return
*/
public static String formUpload(String urlStr, Map<String, String> textMap,
Map<String, String> fileMap) {
String res = \"\";
HttpURLConnection conn = null;
String BOUNDARY = \"---------------------------123821742118716\"; //boundary就是request头和上传文件内容的分隔符
try {
URL url = new URL(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; Windows NT 6.1; zh-CN; rv:1.9.2.6)\");
conn.setRequestProperty(\"Content-Type\",
\"multipart/form-data; boundary=\" + BOUNDARY);
OutputStream out = new DataOutputStream(conn.getOutputStream());
// text
if (textMap != null) {
StringBuffer strBuf = new StringBuffer();
Iterator iter = textMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (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) {
Iterator iter = fileMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
String inputName = (String) entry.getKey();
String inputValue = (String) entry.getValue();
if (inputValue == null) {
continue;
}
File file = new File(inputValue);
String filename = file.getName();
String contentType = new MimetypesFileTypeMap()
.getContentType(file);
if (filename.endsWith(\".png\")) {
contentType = \"image/png\";
}
if (contentType == null || contentType.equals(\"\")) {
contentType = \"application/octet-stream\";
}
StringBuffer strBuf = new StringBuffer();
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());
DataInputStream in = new DataInputStream(
new FileInputStream(file));
int bytes = 0;
byte[] bufferOut = new byte[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();
// 读取返回数据
StringBuffer strBuf = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
strBuf.append(line).append(\"\\n\");
}
res = strBuf.toString();
reader.close();
reader = null;
} catch (Exception e) {
System.out.println(\"发送POST请求出错。\" + urlStr);
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
conn = null;
}
}
return res;
}
}
希望本文所述对大家Java程序设计有所帮助。
本文地址:https://www.stayed.cn/item/23058
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我