【发布时间】:2013-01-29 19:34:25
【问题描述】:
我正在编写一个 Android 应用程序,它与我们公司的 iPad 应用程序完全相同。但是我在 android 上开发时遇到了 1 个问题。该应用程序从网络服务器下载文件。它会调用如下 URL:
https://www.somedomain.com/API/Download.aspx?param1=test¶m2=test2 等等...
在 iPad 上这是完美的(我为此使用了 ASIHTTPRequest 类)。但在 Android 上,它只会给我带来问题。
只要我想用 android 下载文件,它就会下载一个包含 500 内部服务器错误 HTML 文档的文件,而不是 PDF 文件。
我检查了 URL,它们看起来与 iPad 上的完全一样。
我唯一能想象的是,用户下载的文件是“即时”创建的。因此生成文件需要一些时间(10 或 20 秒),然后文件正在下载。
在安卓上我这样做:
我有一个扩展类:
extends AsyncTask<String, Integer, JSONObject>
在一个方法中,我这样做:
HttpClient httpclient = new DefaultHttpClient();
HttpGet httpget = new HttpGet(url);
HttpResponse response = httpclient.execute(httpget);
InputStream data = response.getEntity().getContent();
File file = new File(context.getDir("docs", Context.MODE_PRIVATE), FileName);
OutputStream output = new FileOutputStream(file);
ByteStreams.copy(data, output);
Closeables.closeQuietly(output);
但这给了我一个 500 内部服务器错误文档,而不是所需的 PDF 文件。我在这里想念什么? (抱歉,我刚开始为 Android 开发,所以我不是这种情况的专家 ;-))
提前致谢!
【问题讨论】:
-
我很愚蠢,将其更改为 HTTPGet 但没有区别...
-
您需要发送什么样的标头?例如,Accept 标头会有所作为。服务器是否返回 302 重定向到文件?我怀疑这是 HttpGet 与 ASIHTTPRequest 的默认请求参数的差异。另外,您的代码是否适用于其他 URI?
-
我不需要发送特定的标头。在 iPad 上,我只调用 URL,仅此而已......我尝试了一个简单 JPG 图像的代码,但同样有效,然后文件在调用 URL 时存在,并且我调用的 API 生成即时文件...
-
我也尝试了一些其他方法,然后我得到一个异常告诉我“FileNotExistsException”,这也是我认为设备请求太快的原因
-
@BalusC 你是如何识别出它是一个 POST 请求而不是一个 get 请求?