【问题标题】:Files uploaded onto web server does not contain actual file data上传到网络服务器的文件不包含实际的文件数据
【发布时间】:2014-07-04 03:04:25
【问题描述】:

我正在尝试创建一个接受文件上传的简单 Cakephp 2.5.1 应用程序。我正在使用http://milesj.me/code/cakephp/uploader 中提供的文件上传插件。我按照网站上的说明安装了它,它似乎工作正常。

下面的代码被添加到model.php。模型表中有“图片”列。

public $actsAs = array(
    'Uploader.Attachment' => array(
        // Do not copy all these settings, it's merely an example
        'picture' => array(
            'nameCallback' => '',
            'append' => '',
            'prepend' => '',
            'tempDir' => TMP,
            'uploadDir' => '',
            'transportDir' => '',
            'finalPath' => '',
            'dbColumn' => '',
            'metaColumns' => array(),
            'defaultPath' => '',
            'overwrite' => false,
            'stopSave' => true,
            'allowEmpty' => true,
            'transforms' => array(),
            'transformers' => array(),
            'transport' => array(),
            'transporters' => array(),
            'curl' => array()
        )
    )
);

在关联的ctp文件中,我有如下代码;

<?php
    echo $this->Form->create('Upload', array('type' => 'file'));
    echo $this->Form->input('picture', array('type' => 'file'));
    echo $this->Form->end('Submit');
?>

我设法将图像文件 SSSS.jpg 上传到网络服务器。然而,奇怪的是上传的图像文件是一个很小的文件,其中包含文本中的 HTTP POST 信息,而不是实际的图像数据。文件内容看起来像这样;

_method=POST&_method=POST&data%5BUpload%5D%5Bpicture%5D=SSSS.jpg

谁能告诉我可能出了什么问题?谢谢。

编辑:我刚刚在 Chrome 调试中注意到,在 HTTP POST 方法下,发送的文件类型为 text/html。这是一个问题吗?如果是,如何将类型更改为image/jpg?

【问题讨论】:

  • 您在发送文件的 html 中使用了多部分类型?
  • 我不确定。在 Cakephp 中,视图助手在后台做事。让我先检查一下。
  • 还要验证该字段的名称是否与您 cakephp 上的上传处理程序上的名称相同。
  • 下面的表单代码确实包含enctype="multipart/form-data" &lt;form action="/project-cp251/uploads/add" id="UploadAddForm" enctype="multipart/form-data" method="post" accept-charset="utf-8"&gt;&lt;div style="display:none;"&gt;&lt;input type="hidden" name="_method" value="POST"/&gt;&lt;/div&gt;&lt;div class="input file"&gt;&lt;label for="UploadPicture"&gt;Picture&lt;/label&gt;&lt;input type="file" name="data[Upload][picture]" id="UploadPicture"/&gt;&lt;/div&gt;&lt;div class="submit"&gt;&lt;input type="submit" value="Submit"/&gt;&lt;/div&gt;&lt;/form&gt;
  • @eddwinpaz:问题可能是由于 HTTP Post 中发送的文件类型是 text/html 而不是 image/jpg 而引起的吗?

标签: php cakephp file-upload http-post


【解决方案1】:

更改以下行

echo $this->Form->input('picture', array('type' => 'file'));

转为以下语法

echo $this->Form->input('picture', array('type' => 'file/image'));

示例代码:

echo $form->labelTag('File/image', 'Image');
echo $html->file('File/image');

【讨论】:

  • 谢谢!已验证并标记为正确答案。但是还有一个问题。在我更改为'file/image' 后,输入字段变成了一个文本框,我必须在其中输入文件的完整路径。当它是'type' =&gt; 'file' 时,它是一个我可以单击的按钮,然后会出现一个对话框供我选择文件。有趣的是,没有出现完整路径,只出现了文件名。想知道这是否是问题的根源。
猜你喜欢
  • 2016-01-19
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多