如何通过公共URL从存储中获取文件?

时间:2019-05-28 10:20:38

标签: laravel laravel-5

我有应用程序Laravel。

路径\storage\app\reports\

我试图通过GET网址获取文件,例如:

http://localhost:8000/storage/app/reports/report_27-05-19_05.xlsx

但这对我不起作用。

我也尝试在后端返回文件:

$file = File::get(storage_path($path.$filename));
$type = File::mimeType($path.$filename);

$response = Response::make($file, 200);
$response->header("Content-Type", $type);

return $response;

3 个答案:

答案 0 :(得分:1)

在config文件夹中打开filesystem.php。

'reports' => [
        'driver' => 'local',
        'root' => storage_path('app/reports'),
        'url' => env('APP_URL').'/storage/app/reports',
        'visibility' => 'public',
    ],

将此添加到磁盘阵列。

符号链接可能有效。从未尝试过,但可以工作。试试看。

答案 1 :(得分:1)

尝试类似这样的方法。

以下示例适用于共享托管中存储的csv文件

$filename是将随get请求传递的已保存文件的名称

public function download($filename)
{
    $name = $filename;
    $file = $file = '/home/USERNAME/storage/report/'.$name;

    $header = array(
        'Content-Type' => 'application/csv',
        'Content-Disposition' => 'attachment',
        'Content-lenght' => filesize($file),
        'filename' => $name,
    );

    // auth code
    return Response::download($file, $name, $header);
}

答案 2 :(得分:0)

如果您希望文件可公开访问(没有控制器),则文件位于错误的文件夹中。

符号链接

如果您希望文件可以公开访问。

  1. 将文件移至@Component @Path("iniciativas") @Produces(MediaType.APPLICATION_JSON) public final class IniciativasEndpoint { @POST public Response crearIniciativa(@Valid @NotNull(message = CONSTRAINT_BODY_NOT_NULL) @ConvertGroup(to = IniciativasGroup.Create.class) final IniciativaDTO iniciativaDTO, @Context UriInfo uriInfo) { return Response.ok().build(); } } ,运行storage/app/public。这会将php artisan storage:link链接到storage/app/public。您的文件现在可以在public/storage
  2. 上公开访问

正在提供文件

您还可以使用Laravel / PHP通过控制器提供文件。

  1. 通过控制器检索文件:
http://localhost:8000/storage/report_27-05-19_05.xlsx