android文件重定向编码,Android/Java:HttpURLConnection不返回重定向文件的标头(例如在S3上)...

我的代码(转载如下),连接到一个url并将文件下载到android上的磁盘.所有标准的东西.当我尝试在通过映射到存储桶的服务器上的子域(例如foo.example.com =>存储桶名为foo.example.com)访问的S3上的文件上使用此代码时,它通常会失败.结果(使用方便的卷曲命令..

"curl -v -L -X GET http://foo.example.com/f/a.txt")

..这里有一个重定向.

文件下载工作正常,因为默认情况下HttpURLConnection将遵循重定向,但需要标头信息的调用(getContentLength,getHeaderFieldDate("Last-Modified",0)等)将返回307重定向的标头,而不是实际的文件已下载.

有谁知道怎么解决这个问题?

谢谢

File local = null;

try {

Log.i(TAG, "Downloading file " + source);

conn = (HttpURLConnection) new URL(source).openConnection();

fileSize = conn.getContentLength(); // ** THIS IS WRONG ON REDIRECTED FILES

out = new BufferedOutputStream(new FileOutputStream(destination, false), 8 * 1024);

conn.connect();

stream = new BufferedInputStream(conn.getInputStream(), 8 * 1024);

byte[] buffer = new byte[MAX_BUFFER_SIZE];

while (true) {

int read = stream.read(buffer);

if (read == -1) {

break;

}

// writing to buffer

out.write(buffer, 0, read);

downloaded += read;

publishProgress(downloaded, fileSize);

if (isCancelled()) {

return "The user cancelled the download";

}

}

} catch (Exception e) {

String msg = "Failed to download file " + source + ". " + e.getMessage();

Log.e(TAG, msg );

return msg;

} finally {

if (out != null) {

try {

out.flush();

out.close();

} catch (IOException e) {

Log.e(TAG, "Failed to close file " + destination);

e.printStackTrace();

}

}

if (stream != null) {

try {

stream.close();

} catch (IOException e) {

Log.e(TAG, "Failed to close file " + destination);

e.printStackTrace();

}

} else {

long dateLong = conn.getHeaderFieldDate("Last-Modified", 0 ); // ** THIS IS WRONG ON REDIRECTED FILES

Date d = new Date(dateLong);

local.setLastModified(dateLong);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值