laravel - 当我一次上传多个文件时,为什么 Laravel 只存储最后一个文件?
问题描述
我喜欢一次上传多个文件。
前端 Vue / Vuetify:
<v-file-input
v-model="files"
id="files"
ref="files"
multiple
label="Bild oder Datei hinzufügen"
@change="handleFilesUpload"
>
export default {
name: "HeaderNotesModal",
data: () => ({
media: [],
files: [],
}),
methods: {
submit () {
this.$refs.form.validate()
if (this.valid) {
this.store({
payload: {
title: this.title,
body: this.body
},
context: this
}).then(() => {
if (this.errors.length === 0) {
this.title = ''
this.body = ''
this.$refs.form.resetValidation()
this.form = false
}
if( this.files.length !== 0 ){
this.addMedia({ 'media': this.formData})
}
})
}
},
handleFilesUpload(e){
var self = this;
var files = this.files;
if(files.length > 0){
for(var i = 0; i< files.length; i++){
self.formData.append("file[]", files[i], files[i].name);
}
}
},
},
mounted() {
this.fetchNotes()
}
}
export const addMedia = ({ state, commit }, { media}) => {
return axios.post(`/api/notes/${state.note.id}/media`, media, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
}
后端 Laravel:
public function store(Request $request, Note $note)
{
if($request->hasfile('file'))
{
foreach($request->file('file') as $file)
{
$name = time().'.'.$file->getClientOriginalExtension();
$file->move(storage_path('uploads'), $name);
$data[] = $name;
}
}
return 'success';
}
当我上传多个文件时,它只存储最后一个文件。
我尝试了几种可能的方法,但没有发现错误。
我试图改变前端,然后也是后端。
我尝试了 formData 和没有。
我尝试了几个文件名。
都没有成功
var_dumpreturn var_dump($request->file('file'));
<pre class='xdebug-var-dump' dir='ltr'>
<small>/home/vagrant/code/7aio/app/Http/Controllers/Note/NoteMediaController.php:27:</small>
<b>array</b> <i>(size=2)</i>
0 <font color='#888a85'>=></font>
<b>object</b>(<i>Illuminate\Http\UploadedFile</i>)[<i>392</i>]
<i>private</i> 'test' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>boolean</small> <font color='#75507b'>false</font>
<i>private</i> 'originalName' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'bgvqm7da.png'</font> <i>(length=12)</i>
<i>private</i> 'mimeType' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'image/png'</font> <i>(length=9)</i>
<i>private</i> 'error' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>int</small> <font color='#4e9a06'>0</font>
<i>protected</i> 'hashName' <font color='#888a85'>=></font> <font color='#3465a4'>null</font>
<i>private</i> 'pathName' <small>(SplFileInfo)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'/tmp/phpIIfLwD'</font> <i>(length=14)</i>
<i>private</i> 'fileName' <small>(SplFileInfo)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'phpIIfLwD'</font> <i>(length=9)</i>
1 <font color='#888a85'>=></font>
<b>object</b>(<i>Illuminate\Http\UploadedFile</i>)[<i>372</i>]
<i>private</i> 'test' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>boolean</small> <font color='#75507b'>false</font>
<i>private</i> 'originalName' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'Screenshot at Apr 27 07-35-08.png'</font> <i>(length=33)</i>
<i>private</i> 'mimeType' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'image/png'</font> <i>(length=9)</i>
<i>private</i> 'error' <small>(Symfony\Component\HttpFoundation\File\UploadedFile)</small> <font color='#888a85'>=></font> <small>int</small> <font color='#4e9a06'>0</font>
<i>protected</i> 'hashName' <font color='#888a85'>=></font> <font color='#3465a4'>null</font>
<i>private</i> 'pathName' <small>(SplFileInfo)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'/tmp/phpdRhiD1'</font> <i>(length=14)</i>
<i>private</i> 'fileName' <small>(SplFileInfo)</small> <font color='#888a85'>=></font> <small>string</small> <font color='#cc0000'>'phpdRhiD1'</font> <i>(length=9)</i>
</pre>
解决方案
根据文档(https://laravel.com/docs/7.x/filesystem#file-uploads)
move 方法可用于重命名现有文件或将现有文件移动到新位置:
所以通过这样做:$file->move(storage_path('uploads'), $name);
它不会实现你正在寻找的东西。
您可以改为使用;
foreach($request->file('file') as $file)
{
$name = time().'.'.$file->getClientOriginalExtension();
$file->store('uploads');
$data[] = $name;
}
推荐阅读
- c# - SignalR 从服务器流式传输到客户端
- sql-server - 从 XML 列中选择所有 XML 节点
- android - Android:垂直 ViewPager2 显示项目的下一个和之前
- asterisk - Asterisk 支持的最高和最低支持的音频文件是什么
- asp.net-core-mvc - 阻止验证 ASP.NET Core MVC 中的特定类型
- python - AttributeError:'Player' 对象在 python 中没有属性'player_xpos'
- dynamic - 为什么在 DAX 的过滤表表达式中似乎只有硬编码值有效?
- c# - 创建大小为 6000X4500 像素的位图时参数无效
- c++ - 如何在 C++ 中将 Ackermann 函数更改为 void 返回类型
- spring-security - Spring Security 中的方法 configure(WebSecurity web) 不起作用