Java发送Post请求上传文件

来源:互联网 发布:js判断数组为空 编辑:程序博客网 时间:2024/06/06 02:09

  本来我们已经有了一个上传文件的接口,但是那个接口并不能直接由app端调用,所以才写了一个单独的接口,在该接口中又调用了那个上传文件的接口。

1.JSP中相关代码

<form id="uploadForm" enctype="multipart/form-data">  <p >上传文件: <input type="file" name="file"/></p>  <input type="button" value="上传" onclick="doUpload()" /></form>

2.JS中相关代码

function doUpload() {     var formData = new FormData($("#uploadForm")[0]);     $.ajax({     url: 'http://localhost:32003/app/uploadFile',     type: 'POST',     data: formData,     async: false,     cache: false,     contentType: false,     processData: false,     success: function (returndata) {         alert(returndata);     },     error: function (returndata) {         alert(returndata);     }     }); }

3.JAVA中相关代码

package microservice.fpzj.control.app;import microservice.fpzj.control.base.BaseController;import org.springframework.web.bind.annotation.*;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import javax.servlet.http.HttpServletRequest;import java.io.*;import java.net.HttpURLConnection;import java.net.URL;import java.util.List;/** * Created by lsf on 2017/8/26. */@RestController@RequestMapping("/app")public class AppUploadController extends BaseController{    String uploadUrl="http://212.134.143.32:30009/upload/ajax/upload_file";@CrossOrigin@RequestMapping(value= "/uploadFile" ,method= RequestMethod.POST )    public Object checkUserIsExist(HttpServletRequest request){        String result="";        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;        List<MultipartFile> fileList = multipartRequest.getFiles("file");        if(fileList == null || fileList.size() == 0){            return addResultMapMsg(false,"请上传文件,注意文件的name属性为file");        }        MultipartFile file = fileList.get(0);        try {            // 换行符            final String newLine = "\r\n";            final String boundaryPrefix = "--";            // 定义数据分隔线            String BOUNDARY = "========7d4a6d158c9";            // 服务器的域名            URL url = new URL(uploadUrl);            HttpURLConnection conn = (HttpURLConnection) url.openConnection();            // 设置为POST情            conn.setRequestMethod("POST");            // 发送POST请求必须设置如下两行            conn.setDoOutput(true);            conn.setDoInput(true);            conn.setUseCaches(false);            // 设置请求头参数            conn.setRequestProperty("connection", "Keep-Alive");            conn.setRequestProperty("Charsert", "UTF-8");            conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);            OutputStream out = new DataOutputStream(conn.getOutputStream());            // 上传文件            StringBuilder sb = new StringBuilder();            sb.append(boundaryPrefix);            sb.append(BOUNDARY);            sb.append(newLine);            // 文件参数,photo参数名可以随意修改            sb.append("Content-Disposition: form-data;name=\"photo\";filename=\"" + file.getOriginalFilename()                    + "\"" + newLine);            sb.append("Content-Type:application/octet-stream");            // 参数头设置完以后需要两个换行,然后才是参数内容            sb.append(newLine);            sb.append(newLine);            // 将参数头的数据写入到输出流中            out.write(sb.toString().getBytes());            // 数据输入流,用于读取文件数据            DataInputStream in = new DataInputStream(file.getInputStream());            byte[] bufferOut = new byte[1024*8];            int bytes = 0;            // 每次读8KB数据,并且将文件数据写入到输出流中            while ((bytes = in.read(bufferOut)) != -1) {                out.write(bufferOut, 0, bytes);            }            // 最后添加换行            out.write(newLine.getBytes());            in.close();            // 定义最后数据分隔线,即--加上BOUNDARY再加上--。            byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine)                    .getBytes();            // 写上结尾标识            out.write(end_data);            out.flush();            out.close();            // 定义BufferedReader输入流来读取URL的响应BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));            String line = null;            while ((line = reader.readLine()) != null) {                result += line; //这里读取的是上边url对应的上传文件接口的返回值,读取出来后,然后接着返回到前端,实现接口中调用接口的方式            }        } catch (Exception e) {            System.out.println("发送POST请求出现异常!" + e);            e.printStackTrace();        }        return result;    }}

4.最后

接口已经测试通过,直接复制代码即可,注意请求体中的内容不要修改,固定的格式,我并没有研究过这个,也是用的别人的方式。

原创粉丝点击