1

ユーザーが「削除」ボタンをクリックすると、追加されたファイル名を .listImage から削除する以下の JavaScript 関数があります。

function stopImageUpload(success, imagefilename){

      var result = '';

      if (success == 1){
         result = '<span class="msg">The file was uploaded successfully!</span><br/><br/>';      
         $('.listImage').eq(window.lastUploadImageIndex).append('<div>' + htmlEncode(imagefilename) + '<button type="button" class="deletefileimage">Delete</button><br/><hr/></div>'); 
      }
      else {
         result = '<span class="emsg">There was an error during file upload!</span><br/><br/>';
      }


      $(".deletefileimage").on("click", function(event) {

        $(this).parent().remove();

    });

      return true;   
}

ご覧のとおり、$(".deletefileimage").on("click", function(event) {は、追加された正しいファイル名を削除するために使用されます。

しかし、私がやりたいことは、ユーザーがファイル名を削除すると、サーバーからもファイルが削除されることです。だから私はこのコードを使用しようとしています: unlink($_FILES["fileImage"]["temp_name"]);サーバーからファイルを削除します。

しかし、私が知りたいのは、このコードをどこに保存して、javascript関数を使用して追加されたファイル名を削除し、phpスクリプトに移動してサーバーからファイルを削除できるかということです?

以下は、ファイルのアップロードが行われる php スクリプト (imageupload.php) です。

<?php

session_start();

$result = 0;

if( file_exists("ImageFiles/".$_FILES['fileImage']['name'])) {
    $parts = explode(".",$_FILES['fileImage']['name']);
    $ext = array_pop($parts);
    $base = implode(".",$parts);
    $n = 2;

    while( file_exists("ImageFiles2/".$base."_".$n.".".$ext)) $n++;
    $_FILES['fileImage']['name'] = $base."_".$n.".".$ext;

    move_uploaded_file($_FILES["fileImage"]["tmp_name"],
    "ImageFiles2/" . $_FILES["fileImage"]["name"]);
    $result = 1;

}
    else
      {
      move_uploaded_file($_FILES["fileImage"]["tmp_name"],
      "ImageFiles2/" . $_FILES["fileImage"]["name"]);
      $result = 1;

      }

?>

  <script language="javascript" type="text/javascript">window.top.stopImageUpload(<?php echo $result ? 'true' : 'false'; ?>, '<?php echo $_FILES['fileImage']['name'] ?>');</script>
4

2 に答える 2

3

ajaxサーバー上のファイルの削除を許可するには、php スクリプトへの呼び出しを使用する必要があります。JQuery のajaxドキュメントは、ここにあります。

まず、ボタンと画像ファイル名を次のように接続する必要があります

$('.listImage').eq(window.lastUploadImageIndex).append('<div>' + htmlEncode(imagefilename) + '<button type="button" class="deletefileimage" image_file_name="' + imagefilename + '">Delete</button><br/><hr/></div>');

これで、delete メソッドは次のようになります。

$(".deletefileimage").on("click", function(event) {
    // Find the image file name that is associated with this delete button. You 
    // may want to think about linking the image file name and the delete button
    // in a better way than this.
    var image_file_name = $(this).attr('image_file_name');
    $(this).parent().remove();
    console.log("Deleting " + image_file_name);
    jQuery.ajax("delete.php?imagefilename=" + image_file_name)
      .done(function(data) {
        $(".msg").append(data);
       });
});

最後に、delete.phpこのようなものにする必要があります

<?php
  $image_file_name = "ImageFiles/" . $_GET["imagefilename"];
  if (User Uploaded this File || Has Permission to Delete it)
  {
    print "Deleting $image_file_name";
    // This assumes delete.php is in the same directory as the image file.
    unlink($image_file_name);
  }
?>

これは、実際のコードを示すJSFiddleです。

于 2012-05-01T15:21:54.783 に答える
1

アップロードしたファイルをパブリック一時ディレクトリに保存し、コンテンツが保存されたときにのみ移動することをお勧めします。

マーカー「アクティブ/非アクティブ」を使用して、常にアップロードされたすべてのファイルのリストを取得し、古いファイル (非アクティブで数時間または数日前に作成されたファイル) を削除するスクリプトを定期的に実行する別の方法。この場合、ファイルを追加したりコンテンツを削除したりするときに、そのコンテンツを「非アクティブ」としてマークし、コンテンツを保存するときに、使用済みのファイルを「アクティブ」としてマークします。

于 2012-05-01T15:25:09.360 に答える