Laravel хранит временные файлы вместо

#php #laravel

#php #laravel

Вопрос:

У меня есть код ниже, и вместо сохранения файлов он сохраняет временные файлы в location

Код

 public function upload(Request $request)
{
    //validate the file
    if (!$request->hasFile('file_to_import')) {
        return new JsonResponse([
            'status'  => 'fail',
            'message' => trans('json.needSelectFile'),
        ]);
    }

    $file = $request->file('file_to_import');

    if (strtolower($file->getClientOriginalExtension()) != 'csv') {
        return new JsonResponse([
            'status'  => 'fail',
            'message' => trans('json.needValidCSV'),
        ]);
    }

    $disk = Storage::disk('local');

    if (!$disk->exists('feeds/translations')) {
        $disk->makeDirectory('feeds/translations');
    }

    $uploaded_date = now();
    $name_without_extension = str_replace('.' . $file->getClientOriginalExtension(), '', $file->getClientOriginalName());

    $new_filename = $name_without_extension . ' - ' . $uploaded_date . '.' . $file->getClientOriginalExtension();
    $location = storage_path('app/feeds/translations/', $new_filename);
    $file->move($location);

    return new JsonResponse([
        'status'   => 'success',
        'filename' => $new_filename,
    ]);
}
 

file i uploaded

два

what saved in my app location

один

Что мне нужно

Это сохранение реального файла translator_translations - 2019-04-15 05:52:50.csv , а не файла tmp.

есть идеи?

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

1. используйте метод put, например Storage::disk(‘local’)->put($myfilename, $filedata);

2. Уверен , , что должно быть . (полная остановка / точка) в $location = storage_path('app/feeds/translations/', $new_filename);

Ответ №1:

Вам нужно передать filename в move() функцию вместо любого другого, иначе она примет временное имя.

 $file->move($destinationPath,$filename);
 

Примечания :

Вы должны использовать правильное имя файла. Имя файла не должно содержать никаких специальных символов, таких как пробелы, запятая и двоеточие (:).

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

1. в нем говорится: Could not move the file "C:UsersTheoAppDataLocalTempphpBF29.tmp" to "C:laragonwww.....storageapp/feeds/translationsTranslation_Template - 15-04-2019 06_30_18 - 2019-04-15 06:29:37.csv" (move_uploaded_file(): Unable to move 'C:UsersTheoAppDataLocalTempphpBF29.tmp' to 'C:laragonwwwpursurystorageapp/feeds/translationsTranslation_Template - 15-04-2019 06_30_18 - 2019-04-15 06:29:37.csv')

2. @mafortis Не могли бы вы использовать правильное соглашение об именах файлов в соответствии с laravel? Translation_Template - 15-04-2019 06_30_18 - 2019-04-15 06:29:37.csv это неправильное имя файла. Так и должно быть Translation_Template_15-04-2019_06_30_18_2019-04-15_06_29_37.csv . Вам нужно удалить spaces , - , : из имени файла, пожалуйста.

3. Я изменил свою часть даты на $uploaded_date = now()->format('Y-m-d_H_m_s'); и сейчас она загружается, быстрый вопрос? есть ли в любом случае я получаю свое имя файла, как я был? поскольку мне нужна эта конфигурация имени для другой функции, которая запускается после загрузки файла, если я не могу получить такие имена, мне снова придется менять множество кодов :/

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

5. @mafortis если вы удовлетворены ответом, и он решил вашу проблему в соответствии с вопросом, пожалуйста, откажитесь от голосования и примите его в качестве ответа, пожалуйста. Спасибо! 🙂

Ответ №2:

Вы неправильно подходите к использованию функции перемещения укажите два параметра старый каталог в новый каталог Вы удаляете эту строку $file->move($location); и используете $file->storeAs(
$location, $new_filename
);

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

1. В нем говорится: Impossible to create the root directory "C:laragonwww....storage/appC:/laragon/www/.../storage/app/feeds/translations".

2. $file->storeAs( ‘app/feeds /translations/’, $new_filename ); Используйте это

3. теперь сяй: fopen(C:laragonwww....storage/appapp/feeds/translations/translator_translations - 2019-04-15 06:32:09.csv): failed to open stream: No such file or directory

4. я знаю ваш каталог $file-> storeAs(storage_path(‘app / feeds / translations /’), $new_filename ); Используйте это, я надеюсь, работает нормально

5. попробуйте использовать этот storage_path(‘каналы / переводы /’, $new_filename);