Проблемы с загружаемым архивом

104
19 января 2021, 23:50

Отправляю на сервер архив через OkHttp 3.12.0

class UploadFileClass extends AsyncTask<Void, Void, Void> {
        @Override
        protected Void doInBackground(Void... voids) {
            OkHttpClient okHttpClient = new OkHttpClient();
            File file = new File(folder.getPath(), "zip.zip");
            if (file.exists()) {
                RequestBody requestBody = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("file", "af.zip", RequestBody.create(MediaType.parse("application/zip"), file))
                        .build();
                Request request = new Request.Builder()
                        .url("https://#####.ru/upload.php")
                        .post(requestBody)
                        .build();
                try {
                    Response response = okHttpClient.newCall(request).execute();
                    Log.i(TAG, response.body().string()+" ОТВЕТ ");
                } catch (IOException e) {
                    e.printStackTrace();
                }

                //MediaType.parse(getContentResolver().getType(Uri.fromFile(file)));
                //MediaType.parse("image/png");
                //http://www.freeformatter.com/mime-types-list.html
            }
            return null;
        }
    }

Сам архив я собираю вот так

private void Zip(String source_dir, String zip_file) throws Exception
    {
        FileOutputStream fout = new FileOutputStream(zip_file);
        ZipOutputStream zout = new ZipOutputStream(fout);
        File fileSource = new File(source_dir);
        addDirectory(zout, fileSource);
        zout.close();
        Log.i(TAG,"Zip файл создан!");
    }
    private void addDirectory(ZipOutputStream zout, File fileSource)
            throws Exception
    {
        File[] files = fileSource.listFiles();
        Log.i(TAG,"Добавление директории <" + fileSource.getName() +"> длина <"+files.length+">");
        for(int i = 0; i < files.length; i++) {
            Log.i(TAG,"for");
            // Если file является директорией, то рекурсивно вызываем
            // метод addDirectory
            if(files[i].isDirectory()) {
                addDirectory(zout, files[i]);
                continue;
            }
            Log.i(TAG,"Добавление файла <" + files[i].getName() + ">");
            FileInputStream fis = new FileInputStream(files[i]);
            zout.putNextEntry(new ZipEntry(files[i].getPath()));
            byte[] buffer = new byte[4048];
            int length;
            while((length = fis.read(buffer)) > 0)
                zout.write(buffer, 0, length);
            // Закрываем ZipOutputStream и InputStream
            zout.closeEntry();
            fis.close();
        }
    }

В этом архиве есть много папок, в которых есть фото. Сам он по себе собирается успешно. Проблема в том, что когда в архиве скапливается много папок и в них фоток то он просто не отправляется на сервер и _$FILES['file'] = null, максимум что мне удавалось отправлять это 2 папки в которых по одной фотке.

Сервер

if(isset($_FILES['file'])){
    $name=$_FILES['file']['name'];
    $url=dirname(__FILE__)."/".$name;
    $res=move_uploaded_file($_FILES['file']['tmp_name'], $url);
}

Раньше _$FILES['file]['error'] содержал UPLOAD_ERR_INI_SIZE, и я это исправил.

Answer 1

В php.ini max_file_uploads = 20 заменил на max_file_uploads = 5000

И все работает!

READ ALSO
PHPMailer не отправляет файл

PHPMailer не отправляет файл

Реализую отправку zip файла на почту PHPMailer'ом, используя smtpgmail

118
Как исключить теги из поиска?

Как исключить теги из поиска?

У меня в базе хранится html-код и мне нужно выполнить поиск по содержимому тегов, не затрагивая сами тегиНапример, при поиске script не выводить...

101
Не удаляется папка

Не удаляется папка

Когда я выхожу из приложения должна удаляться папка в которой работал пользовательОна удаляется только в том случае если в папке нет других...

132