

WebViewでメールの添付ファイルをダウンロードしたいのですが、FileNotFoundExceptionのエラーが出ます。  
ちなみにテストはoutlookでしています。

コード:  
ImageGetTask.java

[code]

     InputStream is;
     String url = "https://example.com";
     try {
         URL u = new URL(url);
         HttpURLConnection con = (HttpURLConnection) u.openConnection();
         con.setRequestMethod("GET");
         con.setDoOutput(true);
         con.connect();
         int responseCode = con.getResponseCode();
         if (responseCode >= 400 && responseCode <= 499) {
         }else{
            is = con.getInputStream();
            String path = Environment.getExternalStorageDirectory() + "/apdroid/";
            String fileName = url.substring(url.lastIndexOf('/') + 1);
            File dir = new File(path);
            dir.mkdirs();
            File outputFile = new File(dir, fileName);
            FileOutputStream fos = new FileOutputStream(outputFile);
    
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) != -1) {
                fos.write(buffer, 0, len);
            }
            fos.close();
            is.close();
    
            image = BitmapFactory.decodeStream(is);
         }
         return image;
    
    }catch (IOException e) {
         e.printStackTrace();
    }
    
[/code]

* * *

こちらのコードに変更してやってみたらダウンロードはできるのですが、画像形式ではなくてHtmlで保存されてしまします。

[code]

    Request request = new Request(Uri.parse(url));
        request.allowScanningByMediaScanner();
        request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download");
        request.setVisibleInDownloadsUi(false);
        request.setDescription(contentDisposition);
        downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
        query = new DownloadManager.Query();
        // ダウンロードフラグ
        query.setFilterByStatus(DownloadManager.STATUS_FAILED);
        query.setFilterByStatus(DownloadManager.STATUS_SUCCESSFUL);
        downloadid = downloadManager.enqueue(request);
    
        receiver = new BroadcastReceiver(){
            @Override
            public void onReceive(Context context, Intent intent) {
               String action = intent.getAction();
               if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
    
                   long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);
                   Log.d("xxx", "End Download download Id = " + id);
    
                   query.setFilterById(id);
                   Cursor c = downloadManager.query(query);
    
                   if(c.moveToFirst()) {
                       int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
                       int reason = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_REASON));
                       Log.d("status", Integer.toString(status));
                       Log.d("reason", Integer.toString(reason));
    
                       // ダウンロードに失敗した場合
                       if (status == DownloadManager.STATUS_FAILED) {
                           downloadManager.remove(downloadid);
    
                       // ダウンロードに成功した場合
                       } else if (status == DownloadManager.STATUS_SUCCESSFUL) {
                        Log.d("","SECCUSS");
                        try {
                            ParcelFileDescriptor file =
                                    downloadManager.openDownloadedFile(downloadid);
                            FileInputStream files =
                                    new ParcelFileDescriptor.AutoCloseInputStream(file);
                            imageView.setImageBitmap(BitmapFactory.decodeStream(files));
                        } catch (FileNotFoundException e) {
                            e.printStackTrace();
                        }
    
                       }
                   }
                   c.close();
    
               }
           }
        };
        registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
    
[/code]


CC BY-SA 3.0
2015-02-26T09:39:33.453
7144
2016-03-25T04:11:18.843
2015-02-28T14:14:45.023
30
8567
question
java webview exception
FileNotFoundException:添付ファイルをダウンロード


DownloadManagerのことを調べていたらたどり着きました。  
こちらの質問は9か月前のものなのですでに何かしら解決しているかわかりませんが、  
多分私も以前似たような経験をしたので回答します。

ログインしておかなければ取得できないファイルを取得しようとしてはいませんか？

私はそのファイルをAndroidアプリでWebViewからAsyncTaskでHttpURLConnectionなどを利用してダウンロードしようとした時、自分が指定したjpgファイルとして保存されたものの開くことができませんでした。  
そのファイルをMacへ取り出して確かテキストエディタで見たところ、HTML形式で取得されていることがわかりました。  
拡張子を変えてブラウザで見てみると、「アクセスするにはログインが必要です」的なログインフォームが表示されていました。

fumikiさんがWebViewで何をしているかはわかりませんが、私の場合はWebViewでログイン処理を済ませていたので、その時のCookieをHttpURLConnectionに設定することにより無事画像としてダウンロードすることができたので、それを試してみるといいと思います。


CC BY-SA 3.0
2015-11-26T02:02:47.323
19308
2015-11-26T02:02:47.323
9710
7144
answer