注意:
下面的答案反映了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);
}
答案 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);
}