我正在尝试使用以下方法下载此文件(http://github.com/downloads/TheHolyWaffle/ChampionHelper/ChampionHelper-4.jar),但似乎无法正常工作。我收到一个空文件/损坏的文件。
String link = "http://github.com/downloads/TheHolyWaffle/ChampionHelper/ChampionHelper-4.jar";
String fileName = "ChampionHelper-4.jar";
URL url = new URL(link);
URLConnection c = url.openConnection();
c.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 1.2.30703)");
InputStream input;
input = c.getInputStream();
byte[] buffer = new byte[4096];
int n = -1;
OutputStream output = new FileOutputStream(new File(fileName));
while ((n = input.read(buffer)) != -1) {
if (n > 0) {
output.write(buffer, 0, n);
}
}
output.close();
但是我可以使用相同的方法从我的保管箱(http://dl.dropbox.com/u/13226123/ChampionHelper-4.jar)成功下载以下文件。
因此,以某种方式,Github知道我不是试图下载文件的普通用户。我已经尝试过更改用户代理,但这也无济于事。
那么,如何使用Java下载托管在我的Github帐户上的文件?
编辑:我试图为此使用apache commons-io,但是我得到了相同的效果,一个空/损坏的文件。
这一项工作:
public class Download {
private static boolean isRedirected( Map<String, List<String>> header ) {
for( String hv : header.get( null )) {
if( hv.contains( " 301 " )
|| hv.contains( " 302 " )) return true;
}
return false;
}
public static void main( String[] args ) throws Throwable
{
String link =
"http://github.com/downloads/TheHolyWaffle/ChampionHelper/" +
"ChampionHelper-4.jar";
String fileName = "ChampionHelper-4.jar";
URL url = new URL( link );
HttpURLConnection http = (HttpURLConnection)url.openConnection();
Map< String, List< String >> header = http.getHeaderFields();
while( isRedirected( header )) {
link = header.get( "Location" ).get( 0 );
url = new URL( link );
http = (HttpURLConnection)url.openConnection();
header = http.getHeaderFields();
}
InputStream input = http.getInputStream();
byte[] buffer = new byte[4096];
int n = -1;
OutputStream output = new FileOutputStream( new File( fileName ));
while ((n = input.read(buffer)) != -1) {
output.write( buffer, 0, n );
}
output.close();
}
}
我在android应用程序中使用OKHTTP客户端进行网络连接。 接受下面的回答。我修改过的代码:
问题内容: 我有存储在MySQL表longblob字段中的Excel电子表格。我需要检索此数据,然后将其作为可下载文件流式传输给用户,最好不要先将其写入磁盘。 可能? 编辑-嗯,刚想出来…在下面的答案中发布。 问题答案:
问题内容: 我正在尝试使用jQuery AJAX下载二进制音频文件。 通常我只会发出这样的命令: 但是,最近我们的服务器等待时间太长,无法响应,并且我收到了令人讨厌的网关超时消息。 有人建议我改用jQuery AJAX,从那时起我就可以更好地控制超时了。 这是到目前为止我玩过的代码: 当我省略“ dataType”时,二进制文件的传输量大约是服务器上实际文件传输量的三倍。但是,当我使dataTyp
我有一个回购协议,里面有我需要的二进制文件。 我可以 它似乎签出了正确的标记,但没有下拉二进制文件。如何下拉添加到版本的二进制文件(版本上的绿色框)? 在发行版中添加了二进制文件的图片。
问题内容: 使用带有角的ResponseEntity下载任何文件不起作用 我需要在客户端使用angular下载文件,该文件可以具有pdf或excel或image或txt的任何格式…我的方法仅适用于txt文件,但给我excel和image的失败格式,对于pdf,它会给出一个空的pdf。 所以在我的控制器中,这里是调用service方法的函数: 而我的service.js具有: 我的服务方法是这样的:
问题内容: 请告诉我最好/最快的方法: 1)将很小的二进制文件加载到内存中。例如图标; 2)加载/读取大小为512Mb +的非常大的二进制文件。也许我必须使用内存映射的IO? 3)当您不想考虑大小/速度而只能做的事情时,通常选择:将所有字节读入内存? 谢谢!!! 问题答案: 对于内存映射文件,java有一个nio包:Memory Mapped Files 检出小文件的字节流类:字节流 检出较大文件