Tôi có Biểu mẫu trong số các thông tin khác, người dùng sẽ tải lên hình ảnh. Tôi muốn lưu trữ đường dẫn đến hình ảnh trên cơ sở dữ liệu và lưu hình ảnh vào thư mục public/img/
trên Máy chủ.Laravel 4 - Tải lên tệp
Biểu mẫu đã được mở bằng cách sử dụng: {{ Form::open(['route'=>'pizzas.store', 'files'=>true]) }}
để có thể POST tệp. Kiểm tra HTML Tôi có folowing:
<form method="POST" action="http://mypizza/pizzas"
accept-charset="UTF-8" enctype="multipart/form-data">
Tôi có thể POST lên Bộ điều khiển và nhận tất cả dữ liệu từ Biểu mẫu như mong đợi. Phương pháp xử lý các tập tin như sau:
public function store() {
//TODO - Validation
$destinationPath = '';
$filename = '';
if (Input::hasFile('image')) {
$file = Input::file('image');
$destinationPath = '/img/';
$filename = str_random(6) . '_' . $file->getClientOriginalName();
$uploadSuccess = $file->move($destinationPath, $filename);
}
$pizza = Pizza::create(['name' => Input::get('name'),
'price' => Input::get('price'),
'ingredients' => Input::get('ingredients'),
'active' => Input::get('active'),
'path' => $destinationPath . $filename]);
if ($pizza) {
return Redirect::route('pizzas.show', $pizza->id);
}
//TODO - else
}
Khi tôi chọn một tập tin và gửi biểu mẫu, tất cả mọi thứ dường như làm việc, ngoại trừ việc không có tập tin sẽ được lưu vào thư mục /img
. Cơ sở dữ liệu đăng ký đường dẫn tệp và tên chính xác.
Chạy dd($uploadSuccess);
ngay sau khối if { ...}
, tôi nhận được như sau:
object(Symfony\Component\HttpFoundation\File\File)#220 (2) {
["pathName":"SplFileInfo":private]=> string(17) "/img\YZmLw7_2.jpg"
["fileName":"SplFileInfo":private]=> string(12) "YZmLw7_2.jpg" }
Tôi đang làm gì sai?
Ngoài các câu trả lời từ [Reflic], nó sẽ là cần thiết để điều chỉnh 'path' trên cơ sở dữ liệu như sau: '' con đường '=>' img/'. $ filename]); ' –
Đúng vậy, tôi đã quên điều này. – Reflic