我有这个问题。我有一个 Laravel 代码,我尝试在其中提交带有“附件”的发布请求。问题是,当我尝试将“附件”添加到正文并添加标题 multipart/form-data 时,它没有得到任何内容。返回文件时我得到空白响应。 (https://i.sstatic.net/opiI7iA4.png)(https://i.sstatic.net/lGqlxHx9.png)(https://i.sstatic.net/jtju5l6F.png )
我尝试使用 try 和 catch,但它没有捕获任何错误。我还尝试了 hasFile,但它没有执行 else 语句,因此这意味着已上传文件。
您的方法的问题在于您想要将文件返回给客户端的方式。首先,你必须考虑你的目标。你想实现什么目标?
我假设您想查看是否将正确的内容发送回客户端。为此,您必须执行以下操作:
<?php
class ImportController extends Controller
{
public function import_files(Request $request, $type, $id)
{
$files = $request->file('attachments');
if ($request->hasFile('attachments')) {
$files = (array) $files;
return response()->json([
'files' => Arr::map(
$files,
static fn (UploadedFile $file) => $file->getContent())
]);
}
return response()->json(['files' => 'sad']);
}
}
但是由于 .xlsx 格式不是人类可读的格式,因此您无法通过将文件内容返回给客户端来验证文件。因此,您应该在开发或使用任何包时在本地计算机上存储它们并手动验证它们。这是一个例子:
<?php
class ImportController extends Controller
{
public function import_files(Request $request, $type, $id)
{
$files = $request->file('attachments');
if ($request->hasFile('attachments')) {
$files = (array) $files;
$urls = Arr::map($files, static function (UploadedFile $file) {
$path = $file->store('attachments');
if(!$path) {
throw new \RuntimeException('Failed to store file');
}
return Storage::publicUrl($path);
});
return response()->json(['files' => $urls]);
}
return response()->json(['files' => 'sad']);
}
}