本文是我在看到一篇我记不得是在哪看到的一篇文章上的内容,本人实践过后确实有用,然后分享给大家。
基于一个http协议的一个传输方法,首先呢编写一个普通的类,这个类需要你新建一个项目,单独存放,然后你编写完打包成一个jar包,在客户端运行即可,期间做了一个指定目录扫描文件,用了一个定时器,扫描img目录下的文件,传输成功后会删除文件
本文是我在看到一篇我记不得是在哪看到的一篇文章上的内容,本人实践过后确实有用,然后分享给大家。
首先呢编写一个普通的类,这个类需要你新建一个项目,单独存放,然后你编写完打包成一个jar包,在客户端运行即可
package com.grid.pacs.common.servlet;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import org.apache.http.Consts;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class 本地上传图片至服务器2 {
public static synchronized boolean dsaf( String name){
String URL_STR = "http://10.0.110.113:8080/pacs/uploadServlet";
String localFile = "d:\\img\\" + name;
CloseableHttpClient httpClient = null;
CloseableHttpResponse response = null;
try {
httpClient = HttpClients.createDefault();
// 把一个普通参数和文件上传给下面这个地址 是一个servlet
HttpPost httpPost = new HttpPost(URL_STR);
// 把文件转换成流对象FileBody
FileBody bin = new FileBody(new File(localFile));
StringBody userName = new StringBody("Scott", ContentType.create(
"text/plain", Consts.UTF_8));
StringBody password = new StringBody("123456", ContentType.create(
"text/plain", Consts.UTF_8));
org.apache.http.HttpEntity reqEntity = MultipartEntityBuilder.create()
// 相当于
.addPart("file", bin)
// 相当于
.addPart("userName", userName)
.addPart("pass", password)
.build();
httpPost.setEntity( reqEntity);
// 发起请求 并返回请求的响应
response = httpClient.execute(httpPost);
System.out.println("The response value of token:" + response.getFirstHeader("token"));
// 获取响应对象
org.apache.http.HttpEntity resEntity = response.getEntity();
if (resEntity != null) {
// 打印响应长度
System.out.println("Response content length: " + resEntity.getContentLength());
// 打印响应内容
System.out.println(EntityUtils.toString(resEntity, Charset.forName("UTF-8")));
return true;
}
// 销毁
EntityUtils.consume(resEntity);
return false;
}catch (Exception e){
e.printStackTrace();
return false;
}finally {
try {
if(response != null){
response.close();
}
} catch (IOException e) {
e.printStackTrace();
}
try {
if(httpClient != null){
httpClient.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
// task to run goes here
//dsaf();
File file = new File("d:\\img\\");
// get the folder list
File[] array = file.listFiles();
for(int i=0;i
客户端这个类,最终会访问服务器中的一个servelt,这个servelt会对你传输的文件进行处理保存
emptypackage com.grid.pacs.common.servlet;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
public class UploadServlet extends HttpServlet {
// 表示处理get请求
public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException //抛出异常
{
System.out.println("进入servelt捕捉文件服务");
String uploadPath =this.getServletConfig().getServletContext().getRealPath("/") + "file/scans";
File uploadFile = new File(uploadPath);
if (!uploadFile.exists()) {
uploadFile.mkdirs();
}
System.out.println("Come on, baby .......");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
//检测是不是存在上传文件
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
DiskFileItemFactory factory = new DiskFileItemFactory();
//指定在内存中缓存数据大小,单位为byte,这里设为1*4Mb
factory.setSizeThreshold(1024*4024);
//设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
factory.setRepository(new File("D:\\temp"));
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// 指定单个上传文件的最大尺寸,单位:字节,这里设为50Mb
upload.setFileSizeMax(50 * 1024 * 1024);
//指定一次上传多个文件的总尺寸,单位:字节,这里设为50Mb
upload.setSizeMax(50 * 1024 * 1024);
upload.setHeaderEncoding("UTF-8");
List
items = null;
try {
// 解析request请求
items = upload.parseRequest(request);
} catch (FileUploadException e) {
e.printStackTrace();
}
if(items!=null){
//解析表单项目
Iterator
iter = items.iterator();
while (iter.hasNext()) {
FileItem item = iter.next();
//如果是普通表单属性
if (item.isFormField()) {
//相当于input的name属性
String name = item.getFieldName();
//input的value属性
String value = item.getString();
System.out.println("属性:" + name + " 属性值:" + value);
}
//如果是上传文件
else {
//属性名
String fieldName = item.getFieldName();
//上传文件路径
String fileName = item.getName();
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);// 获得上传文件的文件名
try {
item.write(new File(uploadPath, fileName));
} catch (Exception e) {
e.printStackTrace();
}
}
}
} else{
System.out.println("未捕获到文件.");
}
}
response.addHeader("token", "hello");
}
public void doPost(HttpServletRequest req,HttpServletResponse resp)throws IOException,ServletException
{
this.doGet(req,resp) ;
}
}