Ошибка обнаружения файла при загрузке файла с SD-карты на сервер

#android #filenotfoundexception

#Android #ошибка обнаружения файла

Вопрос:

Я получил FileNotFoundException ошибку.

Код:

Путь к файлу=Environment.getExternalStoragePublicDirectory (Среда.DIRECTORY_MOVIES); Строка dir= getpath.getAbsolutePath(); Log.e(«имя файла каталога»,dir);

             //"/storage/emulated/0/Movies/"

            try {
                FileInputStream fstrm = new FileInputStream(dir filename);
                VideoFileUploadNew hfu = new VideoFileUploadNew( ServerURL.VIDEO_UPLOAD, filename);

                upflag = hfu.Send_Now(fstrm);
                Log.e("filename of v up",filename);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            }
  

общедоступный класс VideoFileUploadNew реализует Runnable {

     URL connectURL;
    String responseString;
    String Title;
    String fileName;
    String Description;
    byte[ ] dataToServer;
    FileInputStream fileInputStream = null;

    public VideoFileUploadNew(String urlString, String file){
        try{
            connectURL = new URL(urlString);
            fileName = file;

        }catch(Exception ex){
            Log.i("HttpFileUpload","URL Malformatted");
        }
    }

    public Boolean Send_Now(FileInputStream fStream){
        fileInputStream = fStream;
        return Sending();
    }

    Boolean Sending(){

        System.out.println("file Name is :" fileName);

        String iFileName = fileName;
        String lineEnd = "rn";
        String twoHyphens = "--";
        String boundary = "*****";
        String Tag="fSnd";
        try
        {
            Log.e(Tag,"Starting Http File Sending to URL");

            // Open a HTTP connection to the URL
            HttpURLConnection conn = (HttpURLConnection)connectURL.openConnection();

            // Allow Inputs
            conn.setDoInput(true);

            // Allow Outputs
            conn.setDoOutput(true);

            // Don't use a cached copy.
            conn.setUseCaches(false);

            // Use a post method.
            conn.setRequestMethod("POST");

            conn.setRequestProperty("Connection", "Keep-Alive");

            conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" boundary);

            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

            dos.writeBytes("Content-Disposition: form-data; name="vfile";filename=""   iFileName  """   lineEnd);
            dos.writeBytes(lineEnd);

            Log.e(Tag,"Headers are written");

            // create a buffer of maximum size
            int bytesAvailable = fileInputStream.available();

            int maxBufferSize =9024;
            int bufferSize = Math.min(bytesAvailable, maxBufferSize);
            byte[ ] buffer = new byte[bufferSize];

            // read file and write it into form...
            int bytesRead = fileInputStream.read(buffer, 0, bufferSize);

            while (bytesRead > 0)
            {
                dos.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable,maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0,bufferSize);
            }
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens   boundary   twoHyphens   lineEnd);

            // close streams
            fileInputStream.close();

            dos.flush();

            Log.e(Tag,"File Sent, Response: " String.valueOf(conn.getResponseCode()));

            InputStream is = conn.getInputStream();

            // retrieve the response from server
            int ch;

            StringBuffer b =new StringBuffer();
            while( ( ch = is.read() ) != -1 ){ b.append( (char)ch ); }
            String s=b.toString();
            Log.i("Response",s);

            dos.close();

            if(String.valueOf(conn.getResponseCode()).equals("200"))
            {
                return true;
            }else{
                return false;
            }
        }
        catch (MalformedURLException ex)
        {
            Log.e(Tag, "URL error: "   ex.getMessage(), ex);
        }

        catch (IOException ioe)
        {
            Log.e(Tag, "IO error: "   ioe.getMessage(), ioe);
        }
        return false;
    }

    @Override
    public void run() {
    }

}
  

Комментарии:

1. Пожалуйста, напишите нормально. Это исключение не существует. И укажите, какой именно оператор вызывает исключение. Позаботьтесь о своем сообщении. Опубликуйте полное сообщение об исключении из logcat здесь.

2. Каковы значения path и filename ?

3. путь: /storage/emulated/0/pilot /имя файла: /pWed_Oct_26_11_45_24_GMT 05_30_2016.mp4

4. невозможно загрузить видео с SD-карты на сервер, по-прежнему отображается исключение filenot found

Ответ №1:

Ваш вопрос все еще довольно расплывчатый, но одна из причин, по которой это происходит, заключается в том, что вы извлекаете относительный URI файла, но для загрузки вам нужен абсолютный URI.

Вы можете проверить различные классы FileUtil следующим образом https://github.com/z0rawarr/AndroidUtilCode/blob/master/utilcode/src/main/java/com/blankj/utilcode/utils/FileUtils.java

Получите абсолютный путь из URI и используйте его для загрузки. Кроме того, не забудьте использовать отладчик и применить точку останова к uploadFile() для отладки URI.