Android:java.io.FileNotFoundException即使文件可以在浏览器上查看

时间:2013-08-05 08:05:11

标签: java android

我正在尝试在我的应用程序中下载图像文件,但即使我可以在浏览器上查看图像,我仍然会收到“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)

3 个答案:

答案 0 :(得分:1)

答案 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错误页面而不是您期望的图像。