자바 아날로그 HTTP 요청 (흐름) 스트림 모드 및 송신함으로써 데이터 파일 JSON

보낸 사람 :

/ **
* 스트리밍
* 전송 파일 및 JSON 객체
*
* @return
* /
공공 정적 문자열 doPostFileStreamAndJsonObj (URL 문자열, 목록 <문자열> 파일 목록의 된 JSONObject의 JSON) {
문자열 결과 = ""; // 반환 매개 변수 요청
문자열 jsonString = json.toJSONString (); // GET jsonstirng, 또는 toString 할 수있는, 긴 JSON 형식으로, 목록에있는 다른 사람들에게로 그 JSON로 확인
//에서 System.out.println ( "========== ====== ");
//에서 System.out.println (XML); // Chouchou 인쇄
//에서 System.out.println을 ("============== == ");
은 try은 {
요청의 아날로그 파라미터 설정을 시작, 양이 하나 하나, 필요한 걸릴 도입되지 //
문자열을 경계 ="------ WebKitFormBoundaryUey8ljRiiZqhZHBu ";
URL을 새로운 새로운 U =의 URL (URL)
HttpURLConnection의 코네티컷 = (HttpURLConnection의) u.openConnection ()
(참으로) conn.setDoOutput;
(참으로) conn.setDoInput;
(false로) conn.setUseCaches,
conn.setRequestMethod (이하 "POST");
conn.setRequestProperty ( "연결", "킵 얼라이브");
//이 시뮬레이션 파이어 폭스, 특정입니다 사용자 에이전트 좀 걸릴 수 있습니다 F12 요청은 무엇인가
, conn.setRequestProperty ( "사용자 에이전트", "; MSIE 6.0; 윈도우 NT 5.1; SV1) 모질라 / 4.0 (호환")
conn.setRequestProperty ( "Charsert", "UTF -11 ")
콘텐츠 타입 포맷 형태, 아날로그 형태의 Ajax 요청에 제공 될 // 여기서
, conn.setRequestProperty ("콘텐츠 - 타입 ","다중 / 폼 데이터, 경계 = "경계 +)
// 지정 콘텐츠 스트림 출력 넣으면이 값에 도달 스트림의 크기
(10,240,000) conn.setChunkedStreamingMode를,
출력 스트림 // 정의 추가]가 APPEND 다음 바이트 차례 기억 바로 뒤에 보내는 데이터가
= OutputStream에 OUT을 새로운 DataOutputStream 정렬 (conn.getOutputStream ());
()) {존재 ) (SB = 새의 StringBuilder를; sb.append ( "-"); sb.append (경계);





















= -1) { out.write (bufferOut, 0) 바이트; }















= I + J. 1 개 INT;
IF (.! 렝> J = 렝 1 &&) {
out.write ( "\ R & LT \ N-".getBytes ()); // 복수의 파일은 파일이 둘 사이에 추가 될 때
}
in.close ();
}는 다른 {
에서 System.out.println ( "파일을 찾을 수 없습니다");
}
}
// 전송 스트림
(end_data) out.write
out.flush ();
out.close을 ();
// 정의 BufferedReader의 입력 스트림은 응답의 URL 읽기
의 BufferedReader 리더 = 새로운 새의 BufferedReader (새 새로 만들기 InputStreamReader (
; conn.getInputStream ()))
""= 문자열 라인,
그동안을 {((= reader.readLine 라인 ()) = 널!)
결과 + 라인 =;
}
//에서 System.out.println ( "================");
//에서 System.out.println (result.toString ()); // 캔 결과 Chouchou 인쇄
"(//에서 System.out.println을================ ");
(반환 된 데이터는 다음 포맷 된 경우) // 결과에 나중에 해결 될 수
캐치 (예외 E) {}
;에서 System.out.println (+ E! "비정상적인 POST 요청 전송")
e.printStackTrace ();
}
결과를 반환;
}

----------------------------------

송신기 테스트 클래스

정적 무효 메인 공개 (문자열 인수 []) {예외 발생
// 아날로그 스트림 파일을 업로드 및 파라미터
스트링을 URL = "http://127.0.0.1:8090/kty/test/receiveStream";
// 파일 목록을 세 밖으로 로컬 파일
목록 <문자열> =의 fileList 새로운 새로운 ArrayList를 <> ();
fileList.add ( "F : 나 \\ \\ \\ 사진 3ba39425fec1965f4d088d2f.bmp 애니메이션 \\");
fileList.add ( "F : \\ 나 \\ 사진 \\ 09b3970fd3f5cc65b1351da4.bmp 애니메이션 \\ ");
fileList.add ("F : \\ 사진 \\ \\ 나 89ff57d93cd1b72cd0164ec9.bmp 애니메이션 \\ ");
// JSON 문자열, 모사, 전송 사진 그 이름을
문자열 JSONString = "{\ N-"+
"\"\ 토큰 ": \"스트림 데이터 \ ", \ N-"+
"\"\ 내용 ": [\ N-"+
"{\ N-"+
"\" ID \ "\". 1 \ ", \ N-"+
"\ "이름 \"\ "3ba39425fec1965f4d088d2f.bmp \"\ n "+
"} \ n "+
"{\ n "+
"\ "ID를 \"\ "2 \"\ n "+
"\"이름 \ "\"09b3970fd3f5cc65b1351da4.bmp \ "\ n"+
"} \ n"+
"{\ n"+
"\"ID를 \ "\"3 \ "\ n"+
"\ "이름 \"\ "89ff57d93cd1b72cd0164ec9.bmp \"\ n "+
"} \ n "+
"] \ n "+
"} ";
된 JSONObject JSON = JSONObject.parseObject (jsonString);
doPostFileStreamAndJsonObj (URL,의 fileList, JSON);
}

 

 

-----------------------------------------

수신 측 :


@RestController
@RequestMapping ( "/ 테스트")
//跨域注解
@CrossOrigin
공용 클래스 TestController {

/ **
*接收流信息
*
* @param 요청
* @return
* /
( "/ receiveStream") @PostMapping
공공 문자열 receiveStream을 ( HttpServletRequest의 요청) {
문자열 결과 = "";
에서 System.out.println ( "进来了");
시도 {
//获取요청里的所有部分
컬렉션 <부> 부품 = request.getParts ();
(반복자 <부품> = parts.iterator 반복기 (); iterator.hasNext ()) {용
부품 부 iterator.next = ();
에서 System.out.println ( "名称========"+ part.getName ());
( "JsonObj".equals (일부 경우.

= 새 새 리더을, BufferedReader을, BufferedReader (새 새로 만들기 InputStreamReader (part.getInputStream ()));
문자열 라인 = "";
문자열 = parseString을 "";
(! (= Reader.readLine 라인 ()) = NULL)을하면서 {
parseString을 + = 라인;
}
된 JSONObject = JSONObject.parseObject JSON (parseString을)
]에서 System.out.println는 (+ json.toJSONString () "JSON 목적은 ================ 수신")
}는 다른 IF ( "파일".equals (부품. getName ())) {
문자열 fileName에 = "";
긴 크기 = part.getSize ();
가져옵니다 // 파일 이름을 직접 헤더 파일 이름을 정의 할 수 있습니다 (대부분은하지 않습니다), 또는 내용 - 처리에서 인하 잘라
// 문자열 = part.getHeader 머리 ( "내용 - 처리를");
// fileName에 = head.substring (head.indexOf ( "파일 이름 =") + 10, head.lastIndexOf ( "\" "));
fileName에 part.getHeader = ( "파일 이름");
에서 System.out.println (파일 이름 + 크기);
// //이 파일은 스트림 파일에 직접 기록 할 수있는 파일입니다
// = 해, InputStream inputStream을 part.getInputStream ();
// OutputStream에 OutputStream에 새로운 새 = FileOutputStream 또는 (파일 이름) ;
// INT bytesWritten = 0;
// INT bytecount는 = 0;
// 바이트 [] 바이트 = 새로운 새 바이트 [1024]
(! (= InputStream.read bytecount는 (바이트)) = -1) // 그동안 {
// OutputStream.write (바이트 bytesWritten, bytecount는);
// bytesWritten + = bytecount는;
//}
// inputStream.close ();
// outputStream.close ();
}
}

// 위의 문제가 의심되는 경우에, 파일을 얻을 다음은의 MultipartFile로 확인 비교적 간단하다
; MultipartHttpServletRequest를 multiRequest = (a MultipartHttpServletRequest를) 요청
번호 // 통계 자료
정수 fileCount = 0;
//请求里키为파일的元素(即文件元素)
목록 <의 MultipartFile> 목록 = multiRequest.getFiles ( "파일");
반면 (fileCount <는 list.size ()) {
의 MultipartFile 파일 = list.get (fileCount);
에서 System.out.println (file.getName ());
에서 System.out.println (file.getOriginalFilename ());
에서 System.out.println (file.getSize ());
fileCount ++;
}
에서 System.out.println ( "共有"+ fileCount + "个文件");
} 캐치 (예외 전자) {
e.printStackTrace ();
}
결과를 반환;
}
}

추천

출처www.cnblogs.com/wjx6270/p/11989900.html