如果用户上传新图像,如何在laravel 5中编辑图像,否则使用旧图像文件上传

时间:2015-12-10 07:15:12

标签: image-processing laravel-5.1

我有一个编辑表单,其中包含一个图像字段,用户可以根据需要上传新图像。

但如果用户没有上传新照片,我只想使用数据库中已有的照片。并且根本不更新图像字段。但是在我的代码中,每当我尝试不上传新的图像形式时,都没有采用旧的输入值。

这是我的编辑功能:

public function expenseupdate1(){

        $input = Input::only('id','Expense_date','Expense_category_id','Vendor_id','Customer_id','Amount','Tax1_id','Tax2_id','Note','Receipt'); 


        $data=new Expense;

        $id=$input['id'];
        $Expense_date=$input['Expense_date'];
        $Expense_category_id=$input['Expense_category_id'];
        $Vendor_id=$input['Vendor_id'];
        $Customer_id=$input['Customer_id'];
        $Amount=$input['Amount'];
        $Tax1_id=$input['Tax1_id'];
        $Tax2_id=$input['Tax2_id'];
        $Note=$input['Note'];

        if(Input::hasFile('Receipt')) {

                $file = Input::file('Receipt');

                $name = time() . '-' . $file->getClientOriginalName();
                $data->Receipt = $name;
                $file->move(public_path() . '/images/', $name);         


            }            

    $affectedrows=Expense::where('id', '=', $id)->update(array('Expense_date' => $Expense_date,'Expense_category_id'=>$Expense_category_id,'Vendor_id'=>$Vendor_id,'Customer_id'=>$Customer_id,'Amount'=>$Amount,'Tax1_id'=>$Tax1_id,'Tax2_id'=>$Tax2_id,'Note'=>$Note,'Receipt'=>$Receipt));

       return redirect('expenseinfo');

   }

这是我的更新表单图片字段代码:

<td> <div class="form-group"style="margin-left:-305px">
            {!! Form::label('image', 'Receipt') !!}

            <input  Input::old('Receipt'), type="file" name="Receipt" value = '{{$data->Receipt}}'></td><td><?php echo $data->Receipt; ?></td>
        </div></td>
    <tr>
    <td>{!! Form::submit('Update', array( 'class'=>'' )) !!}


        {!! Form::close() !!}</td>

任何帮助都将受到极大的赞赏

1 个答案:

答案 0 :(得分:1)

您不会为文件设置默认值。

  

文件输入类型会创建一个字段   用户可以通过它上传文件   从他们的本地计算机或网络。   VALUE属性指定名称   的初始文件,但它是   通常被浏览器忽略为   安全预防措施。

因此,您的应用程序运行正常。由于图片已经在数据库中,因此您无需再次上传图片。

另外,仅供参考,但你可以大大清理你的控制器方法!

/**                                                                                                                                                     
 * Update Expense 1                                                                                                                                     
 *                                                                                                                                                      
 * @param Request $request                                                                                                                              
 * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector                                                                             
 */                                                                                                                                                     
public function expenseupdate1(Request $request){                                                                                                       

    $expense = Expense::find($request->input('id'));                                                                                                    
    $expense->fill($request->only('id','Expense_date','Expense_category_id','Vendor_id','Customer_id','Amount','Tax1_id','Tax2_id','Note','Receipt'));  

    if($request->hasFile('Receipt')) {                                                                                                                  

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

        $name = time() . '-' . $file->getClientOriginalName();                                                                                          
        $expense->Receipt = $name;                                                                                                                      
        $file->move(public_path('/images/'), $name);                                                                                                    
    }                                                                                                                                                   

    $expense->save();                                                                                                                                   

    return redirect('expenseinfo');                                                                                                                     
}                                                                                                                                                       

以上假设您在控制权之上有必要的use陈述,即

use Illuminate\Http\Request;
use App\Expense; //Assuming that Expense is in this namespace

如果您还没有,则应为模型设置可填充数组,以允许fill()方法(质量分配)工作http://laravel.com/docs/5.1/routing#route-model-binding

你可以做的更多,但我已经超出了这个问题的范围。不过,我建议看看:

http://laravel.com/docs/5.1/controllers#restful-resource-controllers http://laravel.com/docs/5.1/controllers#dependency-injection-and-controllers Lockbox

希望这有帮助!