zoukankan      html  css  js  c++  java
  • 不用浏览器,直接用代码发送文件给webservices所在服务器 并且可以周期行的发送

    package com.toic.test;
    
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Date;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class FileUpload {
    
        /**
    * 发送请求
    *
    * @param url
    * 请求地址
    * @param filePath
    * 文件路径
    * @return
    * @throws IOException
    */
    public synchronized String send(String url, String filePath)
    throws IOException {
    
    File file = new File(filePath);
    if (!file.exists() || !file.isFile()) {
    return "ERROR";
    }
    
    /**
    * 第一部分
    */
    URL urlObj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) urlObj.openConnection();
    
    /**
    * 设置关键值
    */
    con.setRequestMethod("POST"); // 以Post方式提交表单,默认get方式
    con.setDoInput(true);
    con.setDoOutput(true);
    con.setUseCaches(false); // post方式不能使用缓存
    
    // 设置请求头信息
    con.setRequestProperty("Connection", "Keep-Alive");
    con.setRequestProperty("Charset", "UTF-8");
    
    // 设置边界
    String BOUNDARY = "----------" + System.currentTimeMillis();
    con.setRequestProperty("Content-Type", "multipart/form-data; boundary="
    + BOUNDARY);
    
    // 请求正文信息
    
    // 第一部分:
    StringBuilder sb = new StringBuilder();
    sb.append("--"); // ////////必须多两道线
    sb.append(BOUNDARY);
    sb.append("
    ");
    sb.append("Content-Disposition: form-data;name="file";filename=""+ file.getName() + ""
    ");
    sb.append("Content-Type:application/octet-stream
    
    ");
    
    byte[] head = sb.toString().getBytes("utf-8");
    
    // 获得输出流
    
    OutputStream out = new DataOutputStream(con.getOutputStream());
    out.write(head);
    
    // 文件正文部分
    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[] foot = ("
    --" + BOUNDARY + "--
    ").getBytes("utf-8");// 定义最后数据分隔线
    
    out.write(foot);
    
    out.flush();
    out.close();
    
    /**
    * 读取服务器响应,必须读取,否则提交不成功
    */
    
    return " Upload | " + filePath + " | " + con.getResponseCode() + " | "+ con.getResponseMessage();
    
    /**
    * 下面的方式读取也是可以的
    */
    
    // try {
    // // 定义BufferedReader输入流来读取URL的响应
    // BufferedReader reader = new BufferedReader(new InputStreamReader(
    // con.getInputStream()));
    // String line = null;
    // while ((line = reader.readLine()) != null) {
    // System.out.println(line);
    // }
    // } catch (Exception e) {
    // System.out.println("发送POST请求出现异常!" + e);
    // e.printStackTrace();
    // }
    
        }
    
    static int counter=0;
    
    //周期上传 知道达到指定条件
    public void timeVoid(){
        
        final Timer timer = new Timer();
        
        TimerTask tt=new TimerTask() { 
            @Override
            public void run() {
                
                 FileUpload up = new FileUpload();
                 int  j=1;
                 while(j<10){
                     
                      try {
                         System.out.println(up.send(
                                 "http://127.0.0.1:7001/RESTfull001/file/upload",
                                 "C:\Documents and Settings\yanxxx\My Documents\My Pictures\Copy ("+(10*counter+j)+") of xz.jpg"
                                     )
                                 );
                     } catch (IOException e) {
                         // TODO Auto-generated catch block
                         e.printStackTrace();
                     }
                  
                     j++;
                 }
                
                 counter++;
                 System.out.println("counter--->"+counter);
                 
                if(counter==3){
                    timer.cancel();
                    System.out.println("到点啦!");
                }
                
            }
        };
        //执行tt 延时10s 每分钟执行1次
        timer.schedule(tt, 10000,1*60*1000/2);
    }
    
    
    // 在指定时间 周期执行  t.schedule(tt, dt, 60*1000);  每分钟执行一次
    public void atTimeSchedule(){
        Date dt=new Date();
        dt=new Date(dt.getYear(),dt.getMonth(),dt.getDay(),dt.getHours(),dt.getMinutes(),30) ;
        
        Timer t=new Timer(false);
        TimerTask tt=new TimerTask(){
    
            @Override
            public void run() {
                
                //放任务的地方
                System.out.println(" exectue time: "+new Date());
                 
            }};
        t.schedule(tt, dt, 60*1000);
        //    t.scheduleAtFixedRate(tt, 1000, 60*1000); //带固定执行频率
         //t.scheduleAtFixedRate(tt, dt, 60*1000);//带固定执行频率
     
    }
    
        public static void main(String[] args) throws IOException {
            
            //不用浏览器,直接用代码发送文件给webservices所在服务器  并且可以周期行的发送
            FileUpload tTask=new FileUpload();
            //  tTask.timeVoid();
            tTask.atTimeSchedule();
                
        }
    }
  • 相关阅读:
    [传智播客学习日记]写在培训即将过半之前
    [传智播客学习日记]SQL语句一例通之二——查询、存储过程
    [传智播客学习日记]分页查询的存储过程
    [传智播客学习日记]保持HTTP状态的方法
    [传智播客学习日记]正则提取网页信息并写入文件
    激情黄健翔
    maxthon 2 预览版的邀请
    Head first design patterns 读书笔记 – Strategy(策略模式)
    如何在ReadOnly的DataGrid中的让CheckBox列可点击
    每天如何自动编译项目并将之打包添加到VSS中
  • 原文地址:https://www.cnblogs.com/rojas/p/4627271.html
Copyright © 2011-2022 走看看