【问题标题】:Safari on iPhone set default image name as image.jpg on input type file inputiPhone上的Safari在输入类型文件输入中将默认图像名称设置为image.jpg
【发布时间】:2014-11-11 02:21:55
【问题描述】:

我使用 CI 2.2 制作了带有附件/文件上传的简单表单。除了在 iphone safari 浏览器上,一切正常。当人们从 iphone safari 附加图像时,文件名变成了 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 safari 中的文件上传问题?

谢谢,

【问题讨论】:

  • 1.像上面这样的评论会阻碍帮助。 2.问题不完整,什么是“CI”,全名会有所帮助。 3. SO 不鼓励反对的选民给出理由,因为多次反对的人会报复反对投票的人。我最近投了一个不好的答案,并且有 5 个旧问题投了反对票。 4. 我怀疑名称是“加密的”,而不是其他一些创建唯一名称的方案。加密具有非常特定的含义。 5. 我没有否决这个问题。
  • 我注意到这个问题在 iOS10 Safari 中得到了修复,很好。
  • @AndyGaskell 这真是个好消息。

标签: php ios iphone codeigniter safari


【解决方案1】:

为名称创建一个 UUID。依赖客户提供的名称是唯一的并不是一个好习惯。

【讨论】:

    【解决方案2】:

    我用这个函数来解决你遇到的同样的问题-

        <?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;
    }
    

    【讨论】:

    • 问题来自于iphone safari,无论原始文件名是什么,图像类型的文件名总是重命名为image.jpg或image.png。我认为内爆也行不通。
    • 我的答案是将其重命名为 image1.png 或 image1.jpg 或者如果存在 image2.png 或 image2.jpg,这将防止覆盖服务器上的文件
    • 问题不是覆盖,因为名称加密已启用。所以每个附件都被重命名为 32 个随机字符串。问题是它在 iphone safari 上失败了。
    • @YashSodha 在大约 10,000 张图像之后,可能会开始变慢。
    猜你喜欢
    • 2018-01-14
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2020-07-31
    • 1970-01-01
    • 1970-01-01
    • 2014-02-16
    • 2022-12-05
    相关资源
    最近更新 更多