话不多说了,大家看代码吧
模拟上传提交,发送端
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
/**
* HTTP上传文件实现类
*/
public class HttpUpload {
/** 缓冲大小 */
private static final int BYTE_BUFFER_SIZE = 1024;
/** 分隔符 */
private static final String BOUNDARY = "---------------------------7d4a6d158c9";
/** Form名 */
private String formName;
/**
* @return the formName
*/
public String getFormName() {
return formName;
}
/**
* @param formName
* the formName to set
*/
public void setFormName(String formName) {
this.formName = formName;
}
/**
* 得到上传的HTTP头
*
* @param fileName 文件名
*/
private byte[] getHttpUploadHeader(String fileName) {
if (formName == null || formName.length() == 0) {
formName = "fileDefaultForm";
}
StringBuilder builder = new StringBuilder();
builder.append("--").append(BOUNDARY).append("\r\n").append(
"Content-Disposition: form-data; name=\"").append(formName)
.append("\"; filename=\"").append(fileName).append("\"\r\n")
.append("Content-Type: application/octet-stream\r\n\r\n");
return builder.toString().getBytes();
}
/**
* 上传主调方法
*/
public void upload(String urlPath, String filePath) throws IOException {
URL url = null;
File file = null;
FileInputStream inputStream = null;
HttpURLConnection connection = null;
try {
url = new URL(urlPath);
file = new File(filePath);
inputStream = new FileInputStream(file);
connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
int total = inputStream.available();
byte[] dataStart = getHttpUploadHeader(file.getName());
byte[] dataEnd = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
// 设置表单类型和分隔符
connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);
// 设置内容长度
connection.setRequestProperty("Content-Length", String.valueOf(dataStart.length + total + dataEnd.length));
OutputStream postStream = connection.getOutputStream();
postStream.write(dataStart);
int current = 0;
while (current < total) {
byte[] b = new byte[BYTE_BUFFER_SIZE];
if (total < BYTE_BUFFER_SIZE + current) {
inputStream.read(b, 0, total - current - 1);
} else {
inputStream.read(b, 0, BYTE_BUFFER_SIZE);
}
postStream.write(b);
current += BYTE_BUFFER_SIZE;
}
postStream.write(dataEnd);
postStream.flush();
postStream.close();
// Send Stream
InputStream is = connection.getInputStream();
is.close();
} catch (MalformedURLException e) {
e.printStackTrace();
throw e;
} catch (FileNotFoundException e) {
e.printStackTrace();
throw e;
} catch (IOException e) {
e.printStackTrace();
throw e;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (connection != null) {
connection.disconnect();
}
}
}
public static void main(String args[]) throws Exception {
new HttpUpload().upload(
"http://localhost:8085/FileUploadAdvance/BigFileUploadServlet",
"D:\\face.jpg");
}
}
测试的时候用apache common中的fileupload组件接收
package org.test;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/**
* Servlet implementation class BigFileUploadServlet
*/
public class BigFileUploadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private static final String WORK_DIR_PATH = "workDir";
private File workDir = null;
private static final String DESTINATION_DIR_PATH = "destDirPath";
private File destDir = null;
private String destDirPath = null;
/**
* @see HttpServlet#HttpServlet()
*/
public BigFileUploadServlet() {
super();
}
public void init(ServletConfig config) throws ServletException {
String workDirPath = config.getInitParameter(WORK_DIR_PATH);
destDirPath = config.getInitParameter(DESTINATION_DIR_PATH);
if (workDirPath != null && workDirPath.length() > 0) {
workDir = new File(workDirPath);
if (!workDir.exists()) {
workDir.mkdirs();
}
}
if (destDirPath != null && destDirPath.length() > 0) {
destDir = new File(destDirPath);
if (!destDir.exists()) {
destDir.mkdirs();
}
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
process(request, response);
} catch(Exception e) {
System.out.println(e);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
try {
process(request, response);
} catch(Exception e) {
System.out.println(e);
}
}
private void process(HttpServletRequest request, HttpServletResponse response) throws Exception {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(500);
factory.setRepository(workDir);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
//ActionContext.initCurrentContext(request, response);
//upload.setProgressListener(new ProgressAdapter(ActionContext.getActionContext()));
//upload.setSizeMax(200);
// Parse the request
List<FileItem> items = upload.parseRequest(request);
for (FileItem item : items){
if (!item.isFormField()) {
String fieldName = item.getFieldName();
String fileName = getFileName(item.getName(), "\\");
fileName = getFileName(fileName, "/");
String contentType = item.getContentType();
boolean isInMemory = item.isInMemory();
long sizeInBytes = item.getSize();
item.write(new File(destDirPath + fileName));
}
}
}
private String getFileName(String originName, String searchChar) {
int pathIndex = originName.lastIndexOf(searchChar);
if (pathIndex != -1) {
return originName.substring(pathIndex + searchChar.length());
}
return originName;
}
}
web.xml中配置如下
<servlet>
<description></description>
<display-name>BigFileUploadServlet</display-name>
<servlet-name>BigFileUploadServlet</servlet-name>
<servlet-class>org.test.BigFileUploadServlet</servlet-class>
<init-param>
<param-name>workDir</param-name>
<param-value>E:/temp/</param-value>
</init-param>
<init-param>
<param-name>destDirPath</param-name>
<param-value>E:/fileTemp/</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>BigFileUploadServlet</servlet-name>
<url-pattern>/BigFileUploadServlet</url-pattern>
</servlet-mapping>
分享到:
相关推荐
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
日历表格面板 [ConfigLine.java] 控制条类 [RoundBox.java] 限定选择控件 [MonthMaker.java] 月份表算法类 [Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...