当前位置: 首页 > 知识库问答 >
问题:

Laravel响应::下载()函数图像问题

松洛华
2023-03-14

我用的是拉威尔5号。我正在创建一个各种各样的照片库。当你点击我使用的图像时

Response::download($path,$filename,$headers);

启动文件的下载。

下面是我的代码:

路线

Route::get('test/{filename}', 'ImageController@getDownload');

当用户转到test/example.png时,它运行get下载函数

控制器

public function getDownload($filename){
    // Define the path and the extension
    $file = public_path() . "/uploads/" . $filename;
    $ext = pathinfo($filename, PATHINFO_EXTENSION);

    if($ext == 'png' || 'PNG'){
      $headers = array(
          'Content-Type:image/png',
        );
    }

    else if($ext == 'jpg' || 'jpeg' || 'JPEG' || 'JPG'){
      $headers = array(
          'Content-Type:image/jpeg',
        );
      }

      else if($ext == 'gif' || 'GIF'){
      $headers = array(
          'Content-Type:image/gif',
        );
      }

      $response = Response::download($file, $filename, $headers);

      return $response;

}

在这个函数中,我声明文件的路径并设置下载。

看法

@foreach ($fileList as $uploadedFiles)
    <div class='img'>
    <a href="test/{{$uploadedFiles}}"/><img src="{{ $uploadsFolder}}/{{   $uploadedFiles }}"/></a>
    </div>  

@endforeach

在我看来,我使用一个循环来获取文件名,然后创建一个指向test/$filename的链接,该链接调用控制器中的方法。

问题所在

使用这种方法似乎可以工作,因为我可以下载docx文件、pdf、txt文件、csv文件等。然而,当下载图像时,当我打开它时,我会得到“图像无法显示”。

在我的上传文件夹中,我有一个名为蛋糕的图像。JPG。

当我下载这个请求标题如下:

  • 接受:text/html,application/xhtml-xml,image/jxr,

响应标题如下所示:

  • 连接:保持活动状态
  • Cookie:XSRF-TOKEN=eyjpdii6imyujwrthwy3efozblribkvzqke9psisinzhbhvijoimuxbrptxvkyu9pwxhnwjdycglpncl0i1wvin0qwcdlnbxnsmte5ceqvk1kzlh0wgaldyyvmrvvo0xc9lmnnnodflqqmzqmzdfpqruvktldz9iwibwwwfjjjjjjjjvjjjjyxyxyzmndzzzjzzzzzzzzzzjzzzzzzzzzzjryzyzyzyzyzyzyzyzyzyzyC0NJNMN2FLMDQYOCJ9;laravelU session=EYJPDII6IMXTS3DUAYT1UNRLS0ZRLVL9PSISINZHBHVLIKOIZGVMJCL09PQNQXDHLNSZJCL3JJJJJJN6WnXY3CRZ3BREXNQB09SDWY1OXLAKE2YW1PUDHBZ2FRC2ZPMEFWNLG3MKRRTMI1FHYIJJ2NZNTQ0ZMDEXMMIZMZMZMZM0YZYZYZYZYZYZYZYZYZZY2Q5FYZD5FYZYZYZYZYZYZYZYZYZL5FZY2ZYZYZL2ZYZY2ZL2ZYZL2ZZZZYZYZL2Z
  • 主机:本地主机
  • 推荐人:http://localhost/lara-mvc/public/gallery
  • 用户代理:Mozilla/5.0(Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/42.0。2311.135狩猎/537.36边缘/12.10240[…]
  • 接受范围:字节
  • 缓存控制:公共
  • 连接:保持活动状态
  • 内容处置:附件;filename=“cake.jpg”
  • 内容长度:115453
  • 内容类型:图像/jpeg
  • 日期:2015年8月24日星期一12:59:21 GMT
  • 保持活动状态:超时=5,最大=100
  • 最后修改:2015年8月24日星期一11:51:57 GMT
  • 服务器:Apache/2.4。10(Win32)OpenSSL/1.0。1i PHP/5.6。3
  • 设置Cookie:laravel_session=EYJPDii6INV3M2D3QWNTVXC4Z09Duuhiao0TRQle9PsisinZHBhLijOIFFDM3LPZES2CdZubxDqVgVv0C5RkVisKrxCxPc2DyQ2DmVHVCT0Doctu0RfyWf3BurdahBqZupIqZm4TbNzNvNzNzNzLdxC9PsiSimi1HyYYZYZYZmWqLmWzMwGrzMzMzMzLmWgLzMzMzMzMzMzLzMzLzMzLzMzLzMzMzZZZZZZmWgGrWgGrWgG;expires=周一,2015年8月24日14:59:22 GMT;最大年龄=7200岁;路径=/;httponly
  • 设置Cookie:XSRF-TOKEN=eyjpdii6ikfzwmzqqm93cu55vctvjjjcei1b19psisinzhblijoit0jqvetventntnkulltng9osdbvy215vgu5egzqmkrjqxdordvtogkyv1loz4wkvrsgptng5wzfuc3qrruwhuza0mruetks0poaiszv3y4ymc9psisim1hyyi6ijflmtuzzjlzzmzjm2jmzymtdimzjjjjjjjjjjjzzmzyzzjjjjjjjjjjjjjjjjjjjjjjjjjjjjjzzzzzzzzzjjjjjjjjjj;expires=周一,2015年8月24日14:59:22 GMT;最大年龄=7200岁;path=/X-Powered-By:PHP/5.6。三,

特别是图像,我是否错误地设置了标题?

先谢谢你。

共有1个答案

陈志
2023-03-14

在此上下文中处理图像时,有两个选项。

1.下载图片

这意味着,将提示下载该文件。在这种情况下,应始终设置此标题(在这种情况下,文件本身的mimetype并不重要):

Content-Type: application/octet-stream
Content-Disposition: attachment; filename="somefilename.someextension"

这对于任何类型的文件都是一样的,这只是强制下载的一般方式。确保相应地设置了文件名。

注意:这只是为了解释。使用download()时,Laravel将自己构建这些头文件。只需确保不使用此方法包含内容类型标题。

2.显示图像

在这种情况下,图像将显示为常规图像。在这里,不应设置内容处置标头,而应仅设置内容类型标头:

Content-Type: image/jpeg

这应该根据图像的相应mimetype进行设置。

在拉威尔:

您应该使用以下方法,而不是download()方法:

$response = Response::make($file, 200)->withHeaders($headers);
 类似资料:
  • 问题内容: 我有一个响应式html布局中的现有图像映射。图像根据浏览器大小缩放,但是图像坐标显然是固定的像素大小。我必须选择哪些选项来调整图像地图坐标的大小? 问题答案: 您也可以使用svg代替图像映射。

  • 在阅读了一整天关于一种或另一种方法后,我仍然不确定什么对我来说是最好的,所有的网站都解释了同样的事情,但是当我想知道真正让我担心的事情时,没有人谈论这个。 我的情况:我几乎所有的图像都使用宽度100%和高度自动,图像容器具有动态大小,例如30vw或40%,等等(不确定在这种情况下,我是否仍然需要在img标记中设置高度和宽度值) 如果我想为我的图像和webp格式提供不同的尺寸,并让浏览器决定选择什么

  • 当我尝试使用带有Scrapy的蜘蛛下载图像时,会出现以下错误。 就我所能理解的而言,我好像在某个地方的url中少了一个“h”?但我一辈子也看不出在哪里。如果我不想下载图片,一切都正常。但是一旦我将适当的代码添加到下面的四个文件中,我就无法使任何东西正常工作。谁能帮我弄明白这个错误吗? items.py 设置.py pipelines.py products.py(我的蜘蛛) 如有任何帮助,将不胜感

  • 我用python scrapy编写了一个脚本,从一个网站下载一些图片。当我运行我的脚本时,我可以在控制台中看到图像的链接(它们都是格式)。然而,当我打开下载完成时应该保存图像的文件夹时,我什么也没有看到。我犯错的地方? 这是我的蜘蛛(我正在从Sublime文本编辑器运行): 这是我在中为要保存的图像定义的内容: 为了让事情更清楚: 我希望保存图像的文件夹名为,我已将其放在项目下的文件夹中。 文件夹

  • 我试图从url下载图像,但得到了java。木卫一。IOException:异常。我的代码是: 当运行投掷: 这段代码适用于某些URL,但对于这一点,我不明白为什么不能。非常感谢。

  • 我试图达到的效果是这个网站上的第一张主要图片:http://shop.soot.me/ 据我所知,这是通过后台实现的,而不是通过<代码> https://jsfiddle.net/jzhang172/e1javm23/