不用浏览器,直接用代码发送文件给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("\r\n");
sb.append("Content-Disposition: form-data;name=\"file\";filename=\""+ file.getName() + "\"\r\n");
sb.append("Content-Type:application/octet-stream\r\n\r\n");

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 = ("\r\n--" + BOUNDARY + "--\r\n").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();
            
    }
}

 

posted on 2015-07-07 16:00  rojas  阅读(216)  评论(0编辑  收藏  举报