Как принять случайное количество загружаемых файлов в php? - PullRequest
0 голосов
/ 23 июня 2019

Я хочу загрузить переменное число (определенное пользователем) количество файлов с помощью ретро-подгонки к php (фотографии в данном случае) для использования в моем php-коде. Я считаю, что у меня есть модифицированный код, но я не уверен, как сделать код php / slim, и я не могу найти ответ. Я искал.

Так что мой андроид java это что-то вроде этого в мышлении. Загрузить переменное количество файлов с телефона на сервер.

caption[] = (cap1, cap2, cap3);
Uri[] = (user selected Uri, second uri, third uri, .....as selected);
x = Uri[].length;

private MultipartBody.Part prepareFilePart(String partName, Uri fileUri) {
    File file = FileUtils.getFile(this, fileUri);
    RequestBody requestFile =
        RequestBody.create(
            MediaType.parse(getContentResolver().getType(fileUri)),
            file
        );
    return MultipartBody.Part.createFormData(partName, file.getName(),
        requestFile);
}

List < MultipartBody.Part > parts = new ArrayList < > ();
While(x >= 0) {
        photo = "photo" + x;
        parts.add(prepareFilePart(photo, Uri[x]));
        x = x - 1;
    }
    ...
Call < ResponseBody > call = service.uploadMultipleFilesDynamic(description, parts);

с вызовом

Call<ResponseBody> uploadMultipleFilesDynamic(
        @Field("cap[]") ArrayList<String> capation[],
        @Part List<MultipartBody.Part> files);
     }

Теперь у php есть реальные вопросы, так как я не знаю, как их получить.

В настоящее время для 1 файла я делаю что-то подобное в slim.

$response = array();

if (isset($_POST['cap']) &&
    ($_POST['IDs']) &&
    ($_POST['filenamev']) &&
    $_FILES['image']['error'] === UPLOAD_ERR_OK) {

    $upload = new pictureuploads();

    $filep = $_FILES['image']['tmp_name'];
    $capp = $_POST['cap'];
    $ID = $_POST['IDs'];
    $desc = $_POST['filenamev'];

    if ($upload->savecapFile($filep, getFileExtension($_FILES['image']['name']), $desc, $ID, $capp)) {
        $response['error'] = false;
        $response['message'] = 'File Uploaded Successfullly';
    } else {
        $response['error'] = true;
        $response['message'] = 'Required parameters are not available';
    }
    echo json_encode($response);
}

с использованием метода как.

public function savecapFile($filep, $extension, $desc, $ID, $timep)
{
    move_uploaded_file($filep, $filedest);
}

Итак, мой вопрос: как мне принять переменное количество файлов в php?

Результаты, которые я хотел бы получить, просты.

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

1 Ответ

0 голосов
/ 27 июня 2019

Попробуйте этот общий пример:

$app->post('/savefile', function (Request $request, Response $response) {
    $post = $request->getParsedBody();
    $files = $request->getUploadedFiles();

    // Custom validation
    if (!isset($post['cap'], $post['IDs'], $post['filenamev'])) {
        // Send validation error code 422
        return $response->withJson([
            'message' => 'Required parameters are not available',
        ])->withStatus(422);
    }

    // Validation passed

    // Save files to this directory
    $destination = 'storage/';

    try {
        $uploadedKeys = array_keys($files['image']['tmp_name']);

        foreach ($uploadedKeys as $key) {
            $tempFile = $files['image']['tmp_name'][$key];
            $filename = $files['image']['name'][$key];
            //$extension = pathinfo($filename , PATHINFO_EXTENSION);
            if (!move_uploaded_file($tempFile, $destination)) {
                throw new RuntimeException(sprintf('Upload failed: %s', $filename));
            }
        }

        // Send OK
        return $response->withJson([
            'success' => true,
            'message' => 'Files uploaded successfully',
        ])->withStatus(200);
    } catch (Exception $exception) {
        // Send error message
        return $response->withJson([
            'message' => sprintf('Upload failed with error: %s', $exception->getMessage()),
        ])->withStatus(500);
    }
});
...