我正在尝试在我的应用程序中下载图像文件,但即使我可以在浏览器上查看图像,我仍然会收到“java.io.FileNotFoundException”。以下是假设下载文件的代码。您可以在浏览器上测试链接
new Thread(new Runnable() {
@Override
public void run() {
String filepath = Environment.getExternalStorageDirectory().getAbsolutePath();
String sample = "https://yande.re/image/617a7bff242f2ec56ccfc84df53604fc/yande.re%20263544%20chibi%20shinomiya_himawari%20vividred_operation.jpg";
try
{
URL url = new URL(sample);
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("POST");
urlConnection.setDoOutput(true);
urlConnection.connect();
File SDCardRoot = new File(Environment.getExternalStorageDirectory(),"Yandere/Wallpapers");
SDCardRoot.mkdirs();
String filename="downloadedFile.jpg";
Log.i("Local filename:",""+filename);
File file = new File(SDCardRoot,filename);
if(file.createNewFile())
{
file.createNewFile();
}
FileOutputStream fileOutput = new FileOutputStream(file);
InputStream inputStream = urlConnection.getInputStream();
int totalSize = urlConnection.getContentLength();
int downloadedSize = 0;
byte[] buffer = new byte[1024];
int bufferLength = 0;
while ( (bufferLength = inputStream.read(buffer)) > 0 )
{
fileOutput.write(buffer, 0, bufferLength);
downloadedSize += bufferLength;
Log.i("Progress:","downloadedSize:"+downloadedSize+"totalSize:"+ totalSize) ;
}
fileOutput.close();
if(downloadedSize==totalSize) filepath=file.getPath();
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
filepath=null;
e.printStackTrace();
}}
}).start();
错误:
08-05 16:36:28.032: W/System.err(17064): java.io.FileNotFoundException: https://yande.re/image/617a7bff242f2ec56ccfc84df53604fc/yande.re%20263544%20chibi%20shinomiya_himawari%20vividred_operation.jpg
08-05 16:36:28.032: W/System.err(17064): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
08-05 16:36:28.032: W/System.err(17064): at libcore.net.http.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:271)
08-05 16:36:28.032: W/System.err(17064): at angel.util.Downloader$1.run(Downloader.java:52)
08-05 16:36:28.032: W/System.err(17064): at java.lang.Thread.run(Thread.java:856)
答案 0 :(得分:1)
更改您的网址字符串:
到
实际上将“https”更改为“http”,它应该可以正常工作。这个改变对我有用。
答案 1 :(得分:0)
您应该使用以下HTTP GET请求方法。您的Web服务器似乎不支持HTTP POST。
urlConnection.setRequestMethod("GET");
答案 2 :(得分:0)
您POST
代码中的GET
而不是405 Method Not Allowed
。
这导致服务器返回urlConnection.setRequestMethod("GET");
错误。如果您使用POST
作为Shamim Ahmmed建议,那么您应该能够获得所需的文件。
您可以阅读有关不同请求方法here的更多信息。基本上,当您想要将数据发送到服务器时通常使用GET
,并且当您只是尝试从服务器获取数据时使用POST
。对于图像,服务器未配置为能够处理{{1}}请求,只返回HTML错误页面而不是您期望的图像。