在输入类型文件中设置默认值

时间:2017-08-07 09:50:10

标签: javascript php ajax laravel

  

注意:

     

下面的答案反映了2009年旧版浏览器的状态。现在,您可以在2017年通过JavaScript实际设置文件输入元素的值。

     

有关详细信息和演示,请参阅此问题的答案:
How to set file input value programatically (i.e.: when drag-dropping files)?

我知道这个问题是重复的,但我想也许有人可以帮助我。

我先问问题。

我有一个表单来更新一些字段:name,order,public,pathheader和pathhome,我的问题是:

可以更新表单,在pathheader和pathhome中使用相同的值,而无需再次单击输入类型文件?

输入类型文件如下所示:

@if (Storage::disk('projects')->has($project->slug))
    <img src="{{ asset('/storage/projects/'.$project->slug.'/header.png') }}" id="img" class="img" style="width:100%;height:200px;background-color:#ccc;border:2px solid gray;">
@else
    <img src="" id="img" class="img" style="width:100%;height:200px;background-color:#ccc;border:2px solid gray;">
@endif
<input type="file" name="pathheader" id="pathheader"  class="form-control-file" aria-describedby="fileHelp" style="display:none;">

因此,当我渲染视图时,它会显示我认为在服务器中找到它并且再次单击它的图像,如果您不想更改它。

让我知道您的意见,如果有人知道该怎么做,我将不胜感激。 (如果知道如何使用某些库或其他功能,请告诉我。

非常感谢。

已解决

更简单的方法:在控制器中生成不需要的数据。

功能内部:

public function updateProject(Request $request, $id) 
{
    $this->validate($request, array(
        'slug'=> 'required',
        'order'=> 'required',
        'public'=> 'required'
    ));
    $project = Project::find($id);
    $project->slug = $request->input('slug');
    $project->order = $request->input('order');
    $project->public = $request->input('public');
    if ($request->hasFile('pathheader')){
        $project->pathheader = $request->file('pathheader');
        \Storage::disk('projects')->putFileAs($project->slug,$project->pathheader,'header.png');
    }
    if ($request->hasFile('pathhome')){
        $project->pathhome = $request->file('pathhome');
        \Storage::disk('projects')->putFileAs($project->slug,$project->pathhome,'home.png');

    }
    $project->save();
    return redirect()->route('admin.projects.show', $project->id);
}

1 个答案:

答案 0 :(得分:2)

由于浏览器的安全性,您不能只将默认值设置为文件输入。

更好的方法是在更新记录之前检查用户是否选择了文件。

所以你的更新功能:

public function update(){
    // Make sure you didn't required the user to select file.
    $attribute = [
        'name' => $request->name,
        'order' => $request->order
    ]
    if($request->hasFile('pathheader')){
        //If user select a file, upload the file 
        //Then you should update your record by 
        //adding fields to your update attribute. 
        $attribute['pathheader'] => $pathheader;

    }
    //otherwise, no changes will happen to your 'pathheader' column.
    DB::table('yourtable')->where('id',$id)->update($attribute);
}