Safari на iPhone устанавливает имя изображения по умолчанию как image.jpg при вводе файла типа ввода

Я использовал CI 2.2, чтобы сделать простую форму с вложением / загрузкой файла. Все работает нормально, кроме браузера iphone Safari. Когда люди прикрепляют изображение из сафари на iphone, имя файла превращается в image.jpg. Это вызывает проблему, когда вложения от другого человека продолжают показывать одно и то же изображение.

Я использовал шифрование имени файла, предоставленное CI, но все же не повезло.

Вот модель:

  • функция для получения значения из поля:

       function check_field()
    {
    $ship_date = $this->input->post('date');
    $image_data = $this->upload->data();
    $field_data = [
    'ship_date'       => $ship_date,
    'ship_boxes'      => $this->input->post('boxes'),
    'ship_attach'     => $image_data['file_name'],
    'image_path'      => $image_data['file_path'],
    'ship_req_fund'   => $this->input->post('option'),
    'ship_amount_req' => $this->input->post('amount'),
    'ship_emp_id'     => $this->session->userdata('id')
    ];
    
    $this->db->insert('shipment', $field_data);
    }
    
    • функция прикрепления

      function attachment()
      {
      $config['upload_path'] = 'uploads/';
      $config['allowed_types'] = 'gif|jpg|png|zip|rar|pdf';
      $config['max_size'] = '3000';
      $config['max_width'] = '2000';
      $config['max_height'] = '2000';
      $config['encrypt_name'] = true;
      $this->upload->initialize($config);
      }
      
    • отправка сообщения на электронную почту:

      function send_message()
      {
      $config = [
      'protocol'  => 'mail',
      'smtp_host' => 'ssl://smtp.googlemail.com',
      'smtp_port' => 465,
      'smtp_user' => '*******@gmail.com',
      'smtp_pass' => '*******',
      'mailtype'  => 'html',
      'charset'   => 'iso-8859-1',
      'wordwrap'  => TRUE
      ];
      
      $image_data = $this->upload->data();
      $image_link = $image_data['client_name'];
      
      $message = '<h3>Below is the shipment data you have submitted.</h3>';
      $message .= '<p><b>Shipment date</b>: ' . $this->input->post('date') . '</p>';
      $message .= '<p><b>Number of boxes</b>: ' . $this->input->post('boxes') . '</p>';
      if($this->upload->data())
      {
      $message .= '<p></b>Attachment</b>: <a href="' . base_url() . 'uploads/' . $image_link . '">Click Here</a></p>';
      }
      else
      {
      $message .= '<p></b>Attachment</b>: No attachment</p>';
      }
      if($this->input->post('option') == 1)
      {
      $message .= '<p><b>Request fund</b>: Yes</p>';
      $message .= '<p><b>Amount of funds requested</b>: $' . $this->input->post('amount') . '</p>';
      }
      else
      {
      $message .= '<p><b>Request fund</b>: No</p>';
      }
      
      $this->email->initialize($config);
      $this->email->set_newline("\r\n");
      $this->email->from('*****@gmail.com', '*****');
      $this->email->to($this->session->userdata('email'));
      $this->email->subject('Shipment detail');
      $this->email->message($message);
      $this->email->send();
      }
      }
      

Кто-нибудь сталкивался с такой же проблемой в прошлом, или я поставил ее неправильно? если это действительно вызвано браузером, любой метод для разрешения загрузки файла в сафари на iphone?

Спасибо,

-2

Решение

Создайте UUID для имени. Использование уникального имени клиента не является хорошей практикой.

0

Другие решения

Я использую эту функцию для той же проблемы, что и у вас —

    <?php
get_filename($filename)
{
$fparts= explode(".",$filename);
$extension = $fparts[count($fparts)-1];
unset($fparts[count($fparts)-1]);
$filenamewoextension=implode(".", $fparts);

counter=0;

while(file_exists($filename))
{

$filename = $filenamewoextension . $counter . $extension;

}
return $filename;
}
0

По вопросам рекламы [email protected]