关于客户端如何在本地自动传输图片到服务端,基于http协议

本文是我在看到一篇我记不得是在哪看到的一篇文章上的内容,本人实践过后确实有用,然后分享给大家。


基于一个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) ;

    }
}

      
      
     
     

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值