일부 서버에서 일부 파일을 다운로드하는 프로그램을 작성했습니다.
현재 프로그램이 올바르게 작동합니다.
하지만 이력서 지원을 추가하고 싶습니다.
나는 이런 식으로하고 있어요 그러나 결과 파일이 손상 :Java : resume URLConnection에서 다운로드
....
File fcheck=new File(SaveDir+"/"+filename);
if(resumebox.isSelected() && fcheck.exists()){
connection.setRequestProperty("Range", "Bytes="+(fcheck.length())+"-");
}
connection.setDoInput(true);
connection.setDoOutput(true);
BufferedInputStream in = new BufferedInputStream (connection.getInputStream());
pbar.setIndeterminate(false);
pbar.setStringPainted(true);
java.io.FileOutputStream fos ;
if(resumebox.isSelected()){
if(fcheck.exists()){
if(connection.getHeaderField("Accept-Ranges").equals("bytes")){
fos = new java.io.FileOutputStream(SaveDir+"/"+filename,true);
}else{
fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
}
}else{
fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
}
}else{
fos = new java.io.FileOutputStream(SaveDir+"/"+filename);
}
....
은 내가 지원을 재개 알고있는 서버에서 테스트하고 있습니다.
몇 바이트를 다운로드했습니다. (72720)
그런 다음 다시 시도했습니다.
그런 다음 16 진수 편집기로 파일을 열었습니다. 오프셋 72720에서 첫 번째 바이트가 반복됩니다.
바이트 0-36 : FLV .............«........ ..onMetaData
바이트 72720-72756 : FLV .............«.......... onMetaData
시작부터 다운로드를 시작합니다!
내가 wget으로 할 때 올바르게 수행하고 Content-Range 필드로 응답합니다!
wget 로그에 "302 FOUND"및 "206 Partial Content"가 포함 된 서버 응답.
"302 FOUND"가 문제를 일으킬 수 있습니까?
무엇이 문제입니까?
감사합니다.
다른 문제는 불필요하게 깊숙이 중첩 된 if/else 블록을 가졌다는 것입니다. '&&'연산자를 사용하십시오. 나는. 'if (a && b && c) {fos = 새로운 FOS (name, true); } else {fos = 새로운 FOS (이름); }'. 그게 전부 야. 마른. – BalusC
코드를 요약했습니다! 블럭이있는 경우에는 일부 메시지를 올리므로 그대로 있어야합니다. 그러나 당신의 응답을 당신을 감사하십시오. – RYN
HTTPUrlConnection은 기본적으로 리디렉션을 따르므로 302는 문제가되지 않습니다. 명시 적으로 리디렉션을 해제하지 않는 한 실제로 파일 내용을 가져 오는 중이므로 의심 스럽습니다. –