0

ファイルを選択し、テキスト ボックスにファイル名を入力して [保存] をクリックすると、ファイルがサーバーに保存されるフォームがあります。

私がそれを機能させたい方法は、次のことです。

1) データベースに行を挿入します。2) ファイルの名前が db の row_id であるファイルを保存します。(ex.38.pdf) 3) db をファイル拡張子で更新します。

それが起こるようにコードを配置する方法がわかりません。行を挿入することはできますが、file_name (ファイルが保存される名前) を設定するには、拡張子が必要です。拡張機能を取得する唯一の方法は、ライブラリをロードすることです。ライブラリをロードするには、$config 配列 (そのうちの 1 つは file_name) を設定する必要があります。

非常に混乱。明らかかもしれませんが、多分私はそれを長い間見つめてきました. 助けてくれてありがとう、そしてそれを理解して頑張ってください。ところで、codeigniter フレームワークを使用しています。

(現在、このコードは壊れています。約 1 時間半いじっています。これは私が最近試したものです)

フォームの送信先のアップロード機能 ---------

 public function do_upload () {
    $fileName = $this->input->post('name');
    $scopeId = $this->session->userdata('scopeId');
    $user = 'user';

    $date = date('n/d/Y', time());
    $query = $this->db->query('
        INSERT 
        INTO scope_uploads 
        VALUES(
            NULL, 
            '. $scopeId .', 
            "'. $fileName .'", 
            "'. $user .'", 
            "'. $date .'",
            "N/A"
        )
    ');

    $lastId = $this->db->insert_id();

    $this->load->library('upload');

    $fileData = $this->upload->data();
    $fileExt = $fileData['file_ext'];

    $config['upload_path'] = './uploads/';      
    $config['allowed_types'] = 'gif|jpg|pdf';       
    $config['file_name'] = ''. $lastId .'.'. $fileExt .'';
    $config['max_size'] = '1000';
    $config['max_width'] = '1024';
    $config['max_height'] = '768';

    $this->load->library('upload', $config);

    $query2 = $this->db->query('
        UPDATE scope_uploads
        SET extension = "'. $fileExt .'"
        WHERE id = '. $lastId .'
    ');

    $error = '';

    if (!$this->upload->do_upload('userfile')) {
        $error = array('error' => $this->upload->display_errors());
        echo 'error';
    } else {
        $data = array('upload_data' => $this->upload->data());          
    }

    if ($error == '') {
        redirect(site_url('headquarters/scopeSummary'));
    } else if ($error !== '') {
        $deleteLastRow = $this->db->query('
            DELETE 
            FROM scope_uploads
            WHERE id = '. $query->insert_id() .'
        ');
    }

    print_r($error);
}
4

4 に答える 4

0

コードを少し変更するだけなので、コードについては説明しません。

  1. ファイル名のフォーム入力を取得します(例:name = "filename")
  2. フォームのアップロード
  3. 送信ボタンが押された場合は、最初にファイルをアップロードする必要があります
  4. fileuploadが正常かどうかを確認します
  5. 成功した場合は、アップロードアクションから「ファイル名」+mimetypeに名前を変更します
  6. 「ファイル名」をデータベースに保存
  7. アップロードに失敗した場合は、エラーメッセージに移動すると、「ファイル名」はデータベースに挿入されません
于 2012-04-20T03:13:24.413 に答える
0

ファイル拡張子は必要ありません。MIME タイプが必要です。で終わるファイルは誰でもアップロードできますが.jpg、これは、誰が何を知っているかを含むテキスト ファイルではないという意味ではありません。

MIME タイプを取得するには、FINFOインストールが必要な場合があるライブラリを使用する必要があります。

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type =  finfo_file($finfo, $_FILES['userfile']['tmp_name']);
finfo_close($finfo);

アップロードされたファイルを抽象化する作業を行ったように見えるので、上記を使用して、グローバル変数をアップロードされたファイルへの適切なフル パス名に置き換えます。

于 2012-04-20T03:24:44.357 に答える
0

codeigniter には、MIME タイプ用の form_validation ライブラリ アドオンがあります: http://codeigniter.com/forums/viewthread/123816/

私は自分のプロジェクトでそれを使用しており、非常にうまく機能しています。

于 2012-04-20T07:44:36.773 に答える
-1

助けてくれてありがとう。codeigniterのドキュメントを読んで、アップロードしたファイルの名前を変更するときに拡張子を含める必要があると思いました。結局のところ、私はしません。すべて修正しました。

于 2012-04-20T21:18:57.840 に答える