如何在laravel5中上传文件并获取上传文件中的文件

时间:2015-04-04 15:43:03

标签: php laravel laravel-5

我无法上传uploads文件夹中的文件。我没有使用公共文件夹,我删除了公共文件,并在根管理器中移动了Laravel的文件夹结构。

app
bootstrap
config
css
database
fonts
images
storage
tests
vendor
uploads
.env
.htaccess
index

我的AashishController.php

<?php 
namespace App\Http\Controllers;
use Input;
use Mail;

class AashishController extends Controller
{
public function index()
{

return view('in');  

}
public function contact()
{
    return view('contact'); 
}
public function postcontact()
{
     $name = \Input::get('name');
     $email = \Input::get('email');
     $phone = \Input::get('phone');
     $message1 = \Input::get('message');
     $file1 = Input::file('file1');

     $userr=$file1;

    //Create directory if it does not exist
    if(!is_dir("uploads/".$userr."/")) {
        mkdir("uploads/".$userr."/");
    }

    // Move the uploaded file
    move_uploaded_file($_FILES["file"]["tmp_name"], "uploads/".$userr."/". $_FILES["file"]["name"]);

    $to ="email@example.com";
    $subject = "hi";
    $mail_body = '<html>
        <body bgcolor="#573A28" topmargin="25">
        Put HTML content here with variables from PHP if you like
        Variable display Example: 
        </body>
    </html>';
    $headers  = "From:email@example.com";
    $headers .= "Content-type: text/html";
    mail($to, $subject, $mail_body, $headers);
    return view('test')->with('name', $name);
}
}

如何从该目录中获取文件并将其传递给视图?

2 个答案:

答案 0 :(得分:1)

你有任何错误吗?

您可能忘记了使用chmod 777向上传文件夹授予写入权限。

编辑:从mkdir路径中删除最后一个斜杠。

并确保$userr变量包含dd($userr);

的有效值

哦,我现在看到了。

1-您正在尝试发送对象而不是将字符串发送到mkdir函数。

2-即使我假设您正在尝试将文件名发送到mkdir,为什么还需要创建一个以该文件名命名的文件夹?只需使用时间戳或一些与rand(100,999)类似的随机值来创建子文件夹。

3-你的$ userr包含一个这样的对象:

object(Symfony\Component\HttpFoundation\File\UploadedFile)[9]
  private 'test' => boolean false
  private 'originalName' => string 'test.jpg' (length=22)
  private 'mimeType' => string 'image/jpeg' (length=10)
  private 'size' => int 667220
  private 'error' => int 0

因此没有必要将它用作对象或甚至声明它。改为使用Input :: file('file1')。

public function postcontact()
{
     $name = \Input::get('name');
     $email = \Input::get('email');
     $phone = \Input::get('phone');
     $message1 = \Input::get('message');
     $file1 = Input::file('file1');


    $timestamp = time();
    //Create directory if it does not exist
    if(!is_dir("uploads/".$timestamp)) {
        mkdir("uploads/".$timestamp);
    }

$sitepath = $_SERVER['DOCUMENT_ROOT'];

        // Move the uploaded file
Input::file('file1')->move($sitepath.'/uploads/'.$timestamp.'/', Input::file('file1')->getClientOriginalName());

    $to ="email@example.com";
    $subject = "hi";
    $mail_body = '<html>
        <body bgcolor="#573A28" topmargin="25">
        Put HTML content here with variables from PHP if you like
        Variable display Example: 
        </body>
    </html>';
    $headers  = "From:email@example.com";
    $headers .= "Content-type: text/html";
    mail($to, $subject, $mail_body, $headers);
    return view('test')->with('name', $name);
}

并且为了访问视图中文件夹的路径,我总是更喜欢使用这种风格:

$data['name'] = $name;
$data['filepath'] = "uploads/".$timestamp."/".Input::file('file1')->getClientOriginalName();
return view('test',$data); 

在您的视图中,您可以使用刀片模板引擎::

访问这些变量
name {{ $name }} <br />
filepath {{ $filepath }} <br />

或使用原始php变量:

name <?php echo $name; ?> <br />
filepath <?php echo $filepath; ?> <br />

答案 1 :(得分:0)

我猜你没有发送带有表格的文件,你的表格应该是:

{{ Form::open(["url"=>"/someurl", "files"=>true,])}    

粘贴您发布数据的视图

您应该先检查文件类型,然后再将其移动到上传文件夹中。

而不是

$sitepath = $_SERVER['DOCUMENT_ROOT'];

使用

$sitepath = public_path();