http API接口接收文件请求

1、java模拟表单方式发送url请求进行文件的提交

    /**
     *
     * @作者 王建明
     * @创建日期 2013-06-27
     * @创建时间 19:28:18
     * @描述 —— 模拟表单进行文件数据提交
     */
    private static void testSimulateFormToPostFile() {
        String localPath = "F:\\软件开发经验\\DeleteNullDir.java";
        File file = null;// 本地文件
        URL url = null;// 服务器action地址
        StringBuffer sb_cookie = null;// 拼装cookies
        StringBuffer sb_body = null;// 报文体
        HttpURLConnection httpUrl = null;// http协议类
        OutputStream fos = null;// 文件流
        FileInputStream fis = null;// 服务器回写响应流
        BufferedReader br = null;// 读取响应
        try {
            file = new File(localPath);
            if (!file.exists()) {
                throw new Exception();
            }
            String _url = "http://10.49.61.101:9999/finance/ajaxUploadFile.do";
            // Cookie[] cs = request.getCookies();
            // sb_cookie = new StringBuffer();
            // for (Cookie c : cs) {
            // sb_cookie.append(" ");
            // sb_cookie.append(c.getName());
            // sb_cookie.append("=");
            // sb_cookie.append(c.getValue());
            // sb_cookie.append(";");
            // }
            // String cookie = sb_cookie.substring(0, sb_cookie.length() - 1);//
            // cookie结束不含有";"
            String boundary = "---------------------------7da2e536604c8";
            url = new URL(_url);
            httpUrl = (HttpURLConnection) url.openConnection();// 创建连接
            httpUrl.setDoInput(true);// 创建输入流,必须有
            httpUrl.setDoOutput(true);// 创建输出流,必须有
            httpUrl.setUseCaches(false);// 不缓存
            httpUrl.setConnectTimeout(30000);// 连接超时
            httpUrl.setReadTimeout(30000);// 响应超时
            httpUrl.setRequestMethod("POST");
            httpUrl.setRequestProperty("Content-Length", "" + file.length());// 文件大小
            httpUrl.addRequestProperty("Charset", "UTF-8");
            httpUrl.addRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            httpUrl.addRequestProperty("Connection", "Keep-Alive");// 连接方式,此处为长连接
            // httpUrl.addRequestProperty("Cookie", cookie);// 权限验证使用
            fos = httpUrl.getOutputStream();
            // 注意,http协议,是流传输,全部内容都要转换为byte类型
            sb_body = new StringBuffer();
            // 分隔符
            sb_body.append("--");
            sb_body.append(boundary);
            sb_body.append("\r\n");
            // 文档类型
            sb_body.append("Content-Disposition: form-data;name=\"upFile\";"
                    + "filename=\"" + "upload_data.xlsx" + "\"\r\n");
            sb_body.append("Content-Type:application/ms-word\r\n\r\n");
            byte[] head = sb_body.toString().getBytes();
            fos.write(head);
            // 文件内容
            fis = new FileInputStream(file);
            byte[] read = new byte[2048];
            int offset = 0;
            while ((offset = fis.read(read)) != -1) {
                fos.write(read, 0, offset);
            }
            fos.write(("\r\n--" + boundary + "--\r\n").getBytes());
            fos.flush();// 发送请求
            // HTTP响应
            br = new BufferedReader(new InputStreamReader(httpUrl
                    .getInputStream()));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2、java使用流的方式发送url请求进行文件的提交

    /**
     *
     * @作者 王建明
     * @创建日期 2013-06-27
     * @创建时间 19:30:05
     * @描述 —— 将文件流直接post的方式进行文件的提交
     */
    private static void testPostInStream() {
        try {
            URL url = new URL(
                    "http://10.49.61.101:9999/finance/ajaxUploadFileTwo.do?filePath=/c/v/b/&fileName=aaa.xlsx");
            // 发送POST请求必须设置如下两行
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
 
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Content-Type", "text/html");
            conn.setRequestProperty("Cache-Control", "no-cache");
            conn.setRequestProperty("Charsert", "UTF-8");
            // conn.setRequestProperty("upFileFileName", "upFileFileName.doc");
            conn.connect();
            conn.setConnectTimeout(10000);
 
            OutputStream out = conn.getOutputStream();
 
            File file = new File("F:\\软件开发经验\\NumberFormateUtil.java");
 
            DataInputStream in = new DataInputStream(new FileInputStream(file));
 
            int bytes = 0;
            byte[] buffer = new byte[1024];
            while ((bytes = in.read(buffer)) != -1) {
                out.write(buffer, 0, bytes);
            }
            in.close();
            out.flush();
            out.close();
 
            BufferedReader br = new BufferedReader(new InputStreamReader(conn
                    .getInputStream()));
            String line = null;
            StringBuffer sb = new StringBuffer();
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
            System.out.println(sb.toString());
            conn.disconnect();
            System.out.println("over");
        } catch (Exception e) {
            System.out.println("发送文件出现异常!" + e);
            e.printStackTrace();
        }
    }

3、后台服务端对应的struts2进行文件内容的接收处理【ajaxUploadFile和ajaxUploadFileTwo两个action的接收处理】

package com.eshopmates.finance.action;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
 
import javax.servlet.http.HttpServletRequest;
 
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;
 
import com.opensymphony.xwork2.Action;
 
/**
 * @作者 王建明
 * @创建日期 2013-06-27
 * @创建时间 18:22:33
 * @版本号 V 1.0
 */
public class GetPostFileAction extends BaseAction {
    // 上传文件
    private File upFile;// 拦截器会为你在缓冲区创建临时文件,这是临时文件对象
    private String upFileContentType;// 头域中的值
    private String upFileFileName;// 报文体中的name
 
    /**
     * @return
     * @作者 王建明
     * @创建日期 2013-06-27
     * @创建时间 19:26:22
     * @描述 —— 网页表单方式或者模拟表单方式提交file文件进行处理
     */
    @org.apache.struts2.convention.annotation.Action("ajaxUploadFile")
    public String ajaxUploadFile() {
        String result;
        try {
            String path = getRequest().getSession().getServletContext()
                    .getRealPath("/uploadFile/" + upFileFileName);// 绝对路径
            File currFile = new File(path);
            System.out
                    .println("接收到的文件存放路径======>" + currFile.getAbsolutePath());
            FileUtils.copyFile(this.upFile, currFile);// struts2提供的工具类,意思是把缓存区文件放到哪里
            result = "{\"success\":true,\"uploadFile\":\"" + currFile.getAbsolutePath()
                    + "\",\"fileSize\":" + currFile.length() + "}";
        } catch (IOException e) {
            e.printStackTrace();
            result = "{\"success\":false}";
        }
        super.ajaxPrintMsg(result, super.CONTENTTYPE_HTML);
        System.out.println("result========>" + result);
        return Action.NONE;
    }
 
    /**
     * @return
     * @throws Exception
     * @作者 王建明
     * @创建日期 2013-06-27
     * @创建时间 19:26:55
     * @描述 —— 直接以文件流的形式进行文件的post提交
     */
    @org.apache.struts2.convention.annotation.Action("ajaxUploadFileTwo")
    public String ajaxUploadFileTwo() throws Exception {
        String result;
        HttpServletRequest request = ServletActionContext.getRequest();
        String rootPath = request.getSession().getServletContext().getRealPath(
                "/");
 
        String filePath = request.getParameter("filePath");
        String fileName = request.getParameter("fileName");
        System.out.println("fileName=====>" + fileName);
 
        InputStream input = request.getInputStream();
        String fileFullPath = rootPath + filePath + fileName;
        File saveFile = new File(fileFullPath);
 
        File file = new File(rootPath + filePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        FileOutputStream fos = new FileOutputStream(fileFullPath);
 
        int size = 0;
        byte[] buffer = new byte[1024];
        while ((size = input.read(buffer, 0, 1024)) != -1) {
            fos.write(buffer, 0, size);
        }
        fos.close();
        input.close();
        result = "{\"success\":true,\"uploadFileName\":\""
                + saveFile.getAbsolutePath() + "\",\"fileSize\":"
                + saveFile.length() + "}";
        super.ajaxPrintMsg(result, super.CONTENTTYPE_HTML);
        System.out.println("filePath===>" + file.getAbsolutePath());
        return Action.NONE;
    }
 
    public File getUpFile() {
        return upFile;
    }
 
    public void setUpFile(File upFile) {
        this.upFile = upFile;
    }
 
    public String getUpFileContentType() {
        return upFileContentType;
    }
 
    public void setUpFileContentType(String upFileContentType) {
        this.upFileContentType = upFileContentType;
    }
 
    public String getUpFileFileName() {
        return upFileFileName;
    }
 
    public void setUpFileFileName(String upFileFileName) {
        this.upFileFileName = upFileFileName;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值