2012-05-18 60 views
1

它太瘋狂了,如此簡單的事情可能如此困難。cakephp 2.1如何以簡單的形式上傳圖片並查看它

請致電所有cakephp 2.1權威。我有一個表格,它有一個名稱和文字圖像(var)字段。

我想簡單地發佈一個圖像,不調整大小,沒有縮略圖,沒有什麼特別的,只是一個簡單的mvc發佈圖像並在view.ctp中查看它的例子。

就是這樣。我已經通過了cakephp.org上的/en/2.1 book和api,但我似乎無法獲得mvc的工作,只要將其上傳到文件夾並在ctp中查看即可。

我控制器

public function add() { 
    if ($this->request->is('post')) { 
     $this->ListShExPainImage->create(); 
     if ($this->ListShExPainImage->save($this->request->data)) { 
      $this->Session->setFlash(__('The list sh ex pain image has been saved')); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash(__('The list sh ex pain image could not be saved. Please, try again.')); 
     } 
    } 
} 

public function view($id = null) { 
    $this->ListShExPainImage->id = $id; 
    if (!$this->ListShExPainImage->exists()) { 
     throw new NotFoundException(__('Invalid list sh ex pain image')); 
    } 
    $this->set('listShExPainImage', $this->ListShExPainImage->read(null, $id)); 
} 

我add.ctp

<?php echo $this->Form->create('ListShExPainImage');?> 
<fieldset> 
    <legend><?php echo __('Add List Sh Ex Pain Image'); ?></legend> 
<?php 
    echo $this->Form->input('name'); 
    echo $this->Form->input('image', array('type' => 'file')); 
?> 
</fieldset> 
<?php echo $this->Form->end(__('Submit'));?> 

我view.ctp

<h2><?php echo __('List Sh Ex Pain Image');?></h2> 
<dl> 
    <dt><?php echo __('Id'); ?></dt> 
    <dd> 
     <?php echo h($listShExPainImage['ListShExPainImage']['id']); ?> 
     &nbsp; 
    </dd> 
    <dt><?php echo __('Name'); ?></dt> 
    <dd> 
     <?php echo h($listShExPainImage['ListShExPainImage']['name']); ?> 
     &nbsp; 
    </dd> 
    <dt><?php echo __('Image'); ?></dt> 
    <dd> 
     <?php echo h($listShExPainImage['ListShExPainImage']['image']); ?> 
     &nbsp; 
    </dd> 
</dl> 

您的幫助將不勝感激,請多關照。

回答

1

在你的控制器中,你沒有做什麼與文件上傳。即使Cake有時會有魔術般的效果,自動猜測你想要做什麼上傳不是其中之一。

the book所述,文件上傳字段返回一個包含多個鍵的數據數組。您應該拿name鍵並將其保存爲image字段(因爲這是您似乎正在調用)。例如:

$filename = $this->request->data['ListShExPainImage']['image']['name']; 

// Move the image 
move_uploaded_file(
    $this->request->data['ListShExPainImage']['image']['tmp_name'], 
    '/path/to/your/image/dir/' . basename($filename)' 
); 

// Set the filename in the database 
$this->request->data['ListShExPainImage']['image'] = $filename; 

此外,你需要有一個所謂的multipart/form-data加密類型設置爲您的形式,以能夠解析圖像上傳,通過將文件類型爲Form create options

此外,不要忘記將文件從臨時文件夾移動到最終位置。

+0

非常感謝你的幫助。我複製並粘貼了一些圖像來測試視圖。我做了這個測試,看看這個視圖是否按照下面給出的答案建議的那樣工作。我已經嘗試了兩個答案,它只是不想將圖像上傳到文件夾中。我在我的webroot中創建了一個文件夾img_list_sh_ex。我錯過了什麼。我在wamp/windows 7工作。任何線索。它可能是文件夾上的文件嗎?作爲一個虛擬服務器,我不想這樣的事情? – user1093405

0

你還需要一個「類型」添加到您的形式:

<?php echo $this->Form->create('ListShExPainImage', array('type' => 'file'));?> 

然後在控制器做這樣的事情:

if (is_uploaded_file($data['ListShExPainImage']['image']['tmp_name'])) 
{ 
    move_uploaded_file(
     $this->request->data['ListShExPainImage']['image']['tmp_name'], 
     '/path/to/your/image/dir/' . $this->request->data['ListShExPainImage']['image']['name'] 
    ); 

    // store the filename in the array to be saved to the db 
    $this->request->data['ListShExPainImage']['image'] = $this->request->data['ListShExPainImage']['image']['name']; 
} 

然後做你創建和保存程序。

在你看來,你會做些事情是這樣顯示圖像:

<?php echo $this->Html->image('/path/to/your/image/dir/' . $listShExPainImage['ListShExPainImage']['image']); ?> 
+0

非常感謝您的幫助。這兩個帖子都非常有助於向我展示所有必須完成的工作。你的view.ctp非常有用。正如我在上面的帖子中所評論的那樣。我只是無法將圖片上傳到文件夾。我已經將一些圖像複製並粘貼到我的webroot中的img_list_sh_ex文件夾中,只是爲了測試view.ctp,但出於某種或其他原因它只是沒有上傳圖像。 Cake也沒有返回錯誤。它可以是權限?我正在使用wamp/windows 7. – user1093405

+0

機會非常好,它與權限相關,但很抱歉,我無法在Windows上提供幫助。 –