單一檔案上傳
1、HTML
<blockquote> <div> <button> <i></i>上传客服二维码<span>*</span> </button> <div> <img class="layui-upload-img lazy" src="/static/imghwm/default1.png" data-src="" alt="layui檔案上傳、預覽及修改方法" > </div> <div> <button>开始上传</button> </div> <div>温馨提示: 每次最多上传一张图片, 单张图片的大小不超过2MB</div> </div> <input> </blockquote>
2、js部分
layui.use(['form', 'element', 'upload'], function () { var form = layui.form; var element = layui.element; var $ = layui.jquery; var upload = layui.upload; //单文件示例 选完文件后不自动上传 var uploadSingle = upload.render({ elem: '#uploadQR' , url: '/web/api/upload/upload?option=4' , accept: 'images' // 允许上传的文件类型 , size: 2048 // 最大允许上传的文件大小 单位 KB , auto: false , bindAction: '#startUploadQR' , choose: function (obj) { //预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $('#qrshow').attr('src', result); //图片链接(base64) }); } , done: function (res, index, upload) { if (res.code == 0) { //上传成功 $("#qrInput").val(res.data[0].fp_relative); var startDiv = $('#startDiv'); startDiv.html('<span>上传成功</span>'); } else { this.error(index, upload); } } , error: function (index, upload) { //演示失败状态,并实现重传 var startDiv = $('#startDiv'); startDiv.html('<span>上传失败</span> <a>重试</a>'); startDiv.find('.demo-reload').on('click', function () { uploadSingle.upload(); }); } }); });
多重圖片的上傳
1、HTML
<blockquote> <div> <button> <i></i>上传商铺图片<span>*</span> </button> <div> <table> <thead> <tr> <th>图片预览</th> <th>大小</th> <th>状态</th> <th>操作</th> </tr> </thead> <tbody></tbody> </table> </div> <button>开始上传</button> <div>温馨提示: 每次最多上传六张图片, 单张图片的大小不超过5MB, 长宽比例推荐1.5:1, 推荐上传图片长675px,宽450px </div> </div> <input> </blockquote>
2、js部分
layui.use(['table', 'form', 'element', 'upload'], function () { var table = layui.table; var form = layui.form; var element = layui.element; var $ = layui.jquery; var upload = layui.upload; //多文件列表示例 var demoListView = $('#imgList'); var totalArray = new Array(); var uploadInst = upload.render({ elem: '#upload' //绑定元素 , url: '/web/api/upload/upload?option=3' //上传接口 , accept: 'images' // 允许上传的文件类型 // , acceptMime: 'image/jpg,image/png' // (只支持jpg和png格式,多个用逗号隔开), , size: 5120 // 最大允许上传的文件大小 单位 KB , auto: false //选择文件后不自动上传 , bindAction: '#startUpload' //指向一个按钮触发上传 , multiple: true // 开启多文件上传 , number: 6 // 同时上传文件的最大个数 , choose: function (obj) { var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 var arr = Object.keys(files); totalArray = totalArray.concat(arr); // 检查上传文件的个数 if (totalArray.length ' , '<td><img class="layui-upload-img lazy" src="/static/imghwm/default1.png" data-src="' + result + '" alt="layui檔案上傳、預覽及修改方法" ></td>' , '<td>' + (file.size / 1014).toFixed(1) + 'kb</td>' , '<td>等待上传</td>' , '<td>' , '<button>重传</button>' , '<button>删除</button>' , '</td>' , ''].join('')); //单个重传 tr.find('.demo-reload').on('click', function () { obj.upload(index, file); }); //删除 tr.find('.demo-delete').on('click', function () { delete files[index]; //删除对应的文件 tr.remove(); uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选 }); demoListView.append(tr); }); } else { // 超出上传最大文件 layer.msg("上传文件最大不超过6个") } } , done: function (res, index, upload) { console.log("res", res); if (res.code == 0) { //上传成功 // 上传成功后将图片路径拼接到input中,多个路径用","分割 var inputVal = document.getElementById("imgInput").value; var valData = ""; if (inputVal) { valData = inputVal + "," + res.data[0].fp_relative; } else { valData = res.data[0].fp_relative; } document.getElementById("imgInput").value = valData; var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(2).html('<span>上传成功</span>'); tds.eq(3).html(''); //清空操作 return delete this.files[index]; //删除文件队列已经上传成功的文件 } this.error(index, upload); } , error: function (index, upload) { var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(2).html('<span>上传失败</span>'); tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传 } }); });
新增頁面
nbsp;html> <meta> <title>添加商铺</title> <meta> <meta> <meta> <link> <div> <form> <div> <div> <div> <label>商铺名称<span>*</span></label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <label>商铺编号</label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <label>详细地址<span>*</span></label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <label>联系方式<span>*</span></label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <blockquote> <div> <button> <i></i>上传客服二维码<span>*</span> </button> <div> <img src="/static/imghwm/default1.png" data-src="" class="lazy" alt="layui檔案上傳、預覽及修改方法" > </div> <div> <button>开始上传</button> </div> <div>温馨提示: 每次最多上传一张图片, 单张图片的大小不超过2MB</div> </div> <input> </blockquote> </div> </div> </div> <div> <div> <div> <blockquote> <div> <button> <i></i>上传商铺图片<span>*</span> </button> <div> <table> <thead> <tr> <th>图片预览</th> <th>大小</th> <th>状态</th> <th>操作</th> </tr> </thead> <tbody></tbody> </table> </div> <button>开始上传</button> <div>温馨提示: 每次最多上传六张图片, 单张图片的大小不超过5MB, 长宽比例推荐1.5:1, 推荐上传图片长675px,宽450px </div> </div> <input> </blockquote> </div> </div> </div> <div> <div> <div> <button>确认保存</button> </div> </div> </div> </form> </div> <script></script> <script> layui.use(['table', 'form', 'element', 'upload'], function () { var table = layui.table; var form = layui.form; var element = layui.element; var $ = layui.jquery; var upload = layui.upload; //单文件示例 选完文件后不自动上传 var uploadSingle = upload.render({ elem: '#uploadQR' , url: '/web/api/upload/upload?option=4' , accept: 'images' // 允许上传的文件类型 , size: 2048 // 最大允许上传的文件大小 单位 KB , auto: false , bindAction: '#startUploadQR' , choose: function (obj) { //预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $('#qrshow').attr('src', result); //图片链接(base64) }); } , done: function (res, index, upload) { if (res.code == 0) { //上传成功 $("#qrInput").val(res.data[0].fp_relative); var startDiv = $('#startDiv'); startDiv.html('<span style="color: #5FB878;">上传成功'); } else { this.error(index, upload); } } , error: function (index, upload) { //演示失败状态,并实现重传 var startDiv = $('#startDiv'); startDiv.html('<span style="color: #FF5722;">上传失败 <a class="layui-btn layui-btn-xs demo-reload" style="width:50px;height:30px;text-align:center;line-height:30px;">重试'); startDiv.find('.demo-reload').on('click', function () { uploadSingle.upload(); }); } }); //多文件列表示例 var demoListView = $('#imgList'); var totalArray = new Array(); var uploadInst = upload.render({ elem: '#upload' //绑定元素 , url: '/web/api/upload/upload?option=3' //上传接口 , accept: 'images' // 允许上传的文件类型 // , acceptMime: 'image/jpg,image/png' // (只支持jpg和png格式,多个用逗号隔开), , size: 5120 // 最大允许上传的文件大小 单位 KB , auto: false //选择文件后不自动上传 , bindAction: '#startUpload' //指向一个按钮触发上传 , multiple: true // 开启多文件上传 , number: 6 // 同时上传文件的最大个数 , choose: function (obj) { var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 var arr = Object.keys(files); totalArray = totalArray.concat(arr); // 检查上传文件的个数 if (totalArray.length <= 6) { //读取本地文件 obj.preview(function (index, file, result) { var tr = $(['<tr id="upload-' + index + '">' , '<td><img src="/static/imghwm/default1.png" data-src="' + result + '" class="lazy" alt="' + file.name + '" style="max-width:90%">' , '<td>' + (file.size / 1014).toFixed(1) + 'kb' , '<td>等待上传' , '<td>' , '<button class="layui-btn demo-reload layui-hide">重传' , '<button class="layui-btn layui-btn-danger demo-delete">删除' , '' , ''].join('')); //单个重传 tr.find('.demo-reload').on('click', function () { obj.upload(index, file); }); //删除 tr.find('.demo-delete').on('click', function () { delete files[index]; //删除对应的文件 tr.remove(); uploadListIns.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选 }); demoListView.append(tr); }); } else { // 超出上传最大文件 layer.msg("上传文件最大不超过6个") } } , done: function (res, index, upload) { console.log("res", res); if (res.code == 0) { //上传成功 // 上传成功后将图片路径拼接到input中,多个路径用","分割 var inputVal = document.getElementById("imgInput").value; var valData = ""; if (inputVal) { valData = inputVal + "," + res.data[0].fp_relative; } else { valData = res.data[0].fp_relative; } document.getElementById("imgInput").value = valData; var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(2).html('<span style="color: #5FB878;">上传成功'); tds.eq(3).html(''); //清空操作 return delete this.files[index]; //删除文件队列已经上传成功的文件 } this.error(index, upload); } , error: function (index, upload) { var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(2).html('<span style="color: #FF5722;">上传失败'); tds.eq(3).find('.demo-reload').removeClass('layui-hide'); //显示重传 } }); form.on("submit(addObject)", function (data) { $.ajax({ url: "/web/api/seller/add", type: "post", data: data.field, dataType: "json", success: function (response) { if (response["code"] == 0) { layer.msg("添加成功", { icon: 1, time: 2500 // 默认三秒 }, function () { // 关闭回调,关闭层刷新页面 var index = parent.layer.getFrameIndex(window.name); // 先得到当前iframe层的索引 parent.layer.close(index); }); } else { layer.msg(response["msg"], { icon: 1, time: 1500 // 1.5秒,默认三秒 }); } return false; }, error: function (response) { layer.msg(response["msg"], { icon: 1, time: 1500 // 1.5秒,默认三秒 }); } }); return false; // 关闭表单提交 }); }); </script>
編輯頁面
nbsp;html> <meta> <title>编辑商铺</title> <meta> <meta> <meta> <link> <div> <form> <input> <div> <div> <div> <label>商铺名称</label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <label>商铺编号</label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <label>详细地址</label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <label>联系方式</label> <div> <input> </div> </div> </div> </div> <div> <div> <div> <blockquote> <div> <div> <img src="/static/imghwm/default1.png" data-src="" class="lazy" alt="layui檔案上傳、預覽及修改方法" > </div> <div> <div> <button> <i></i>修改客服二维码 </button> </div> <div> <button>开始上传 </button> </div> </div> <div>温馨提示: 每次最多上传一张图片, 单张图片的大小不超过2MB</div> </div> <input> <input> </blockquote> </div> </div> </div> <div> <div> <div> <div> <div> <table> <thead> <tr> <th>图片预览</th> <th>状态</th> <th>操作</th> </tr> </thead> <tbody></tbody> </table> </div> <div> <div> <button> <i></i>添加商铺图片 </button> </div> <div> <button> 开始上传 </button> </div> </div> <div>温馨提示: 每次最多上传六张图片, 单张图片的大小不超过5MB, 长宽比例推荐1.5:1, 推荐上传图片长675px,宽450px </div> </div> <input> <input> </div> </div> </div> <div> <div> <div> <button>确认保存</button> </div> </div> </div> </form> </div> <script></script> <!-- 注意:如果你直接复制所有代码到本地,上述js路径需要改成你本地的 --> <script> layui.use(['form', 'element', 'jquery', 'upload'], function () { var form = layui.form; var element = layui.element; var $ = layui.jquery; var upload = layui.upload; //单文件示例 选完文件后不自动上传 var uploadSingle = upload.render({ elem: '#uploadQR' , url: '/web/api/upload/upload?option=4' , accept: 'images' // 允许上传的文件类型 , size: 2048 // 最大允许上传的文件大小 单位 KB , auto: false , bindAction: '#startUploadQR' , choose: function (obj) { //预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $('#qrshow').attr('src', result); //图片链接(base64) }); } , done: function (res, index, upload) { if (res.code == 0) { //上传成功 $("#qrInput").val(res.data[0].fp_relative); $("#uploadQR").addClass("layui-hide"); var startDiv = $('#startDiv'); startDiv.html('<span style="color: #5FB878;font-size: 17px;">修改成功'); } else { this.error(index, upload); } } , error: function (index, upload) { //演示失败状态,并实现重传 var startDiv = $('#startDiv'); startDiv.html('<span style="color: #FF5722;">上传失败 <a class="layui-btn layui-btn-xs demo-reload" style="width:50px;height:30px;text-align:center;line-height:30px;">重试'); startDiv.find('.demo-reload').on('click', function () { uploadSingle.upload(); }); } }); //多文件列表示例 var demoListView = $('#imgList'); var totalArray = new Array(); var uploadInst = upload.render({ elem: '#upload' //绑定元素 , url: '/web/api/upload/upload?option=3' //上传接口 , accept: 'images' // 允许上传的文件类型 // , acceptMime: 'image/jpg,image/png' // (只支持jpg和png格式,多个用逗号隔开), , size: 5120 // 最大允许上传的文件大小 单位 KB , auto: false //选择文件后不自动上传 , bindAction: '#startUpload' //指向一个按钮触发上传 , multiple: true // 开启多文件上传 , number: 6 // 同时上传文件的最大个数 , choose: function (obj) { var files = this.files = obj.pushFile(); //将每次选择的文件追加到文件队列 var totalArray = Object.keys(files); // 检查上传文件的个数 if (totalArray.length < (7 - demoListView.data("choiceTotal"))) { //读取本地文件 obj.preview(function (index, file, result) { var tr = $(['<tr id="upload-' + index + '">' , '<td><img src="/static/imghwm/default1.png" data-src="' + result + '" class="lazy" alt="' + file.name + '" style="max-width:90%">' , '<td>等待上传' , '<td>' , '<button class="layui-btn layui-btn-sm demo-reload layui-hide">重传' , '<button class="layui-btn layui-btn-sm layui-btn-danger demo-delete">删除' , '' , ''].join('')); //单个重传 tr.find('.demo-reload').on('click', function () { obj.upload(index, file); }); //删除 tr.find('.demo-delete').on('click', function () { delete files[index]; //删除对应的文件 tr.remove(); uploadInst.config.elem.next()[0].value = ''; //清空 input file 值,以免删除后出现同名文件不可选 totalArray.splice(totalArray.indexOf(index), 1); }); demoListView.append(tr); }); } else { // 超出上传最大文件 layer.msg("上传文件最大不超过6个"); totalArray.pop(); } } , done: function (res, index, upload) { if (res.code == 0) { //上传成功 // 上传成功后将图片路径拼接到input中,多个路径用","分割 var inputVal = document.getElementById("imgInput").value; var valData = ""; if (inputVal) { valData = inputVal + "," + res.data[0].fp_relative; } else { valData = res.data[0].fp_relative; } document.getElementById("imgInput").value = valData; var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(1).html('<span style="color: #5FB878;">上传成功'); tds.eq(2).html(''); //清空操作 return delete this.files[index]; //删除文件队列已经上传成功的文件 } this.error(index, upload); } , error: function (index, upload) { var tr = demoListView.find('tr#upload-' + index) , tds = tr.children(); tds.eq(1).html('<span style="color: #FF5722;">上传失败'); tds.eq(2).find('.demo-reload').removeClass('layui-hide'); //显示重传 } }); // 监听修改客服二维码事件 $("#uploadQR").on("click", function () { $("#startUploadQR").removeClass('layui-hide'); }); // 处理图片的修改 demoListView.on('click', '.edit-btn', function () { var csid = $(this).attr("csid"); var startid = $(this).attr("startid"); var currentIndex = parseInt(csid.split("_")[1]); var $currentTr = $(this).parent().parent(); $(this).addClass("layui-hide"); $("#" + csid).removeClass("layui-hide"); $("#" + startid).removeClass("layui-hide"); var uploadEdit = upload.render({ elem: '#' + csid , url: '/web/api/upload/upload?option=3' , accept: 'images' // 允许上传的文件类型 , size: 2048 // 最大允许上传的文件大小 单位 KB , auto: false , bindAction: '#' + startid , choose: function (obj) { //预读本地文件示例,不支持ie8 obj.preview(function (index, file, result) { $currentTr.children().eq(0).html('<img src="/static/imghwm/default1.png" data-src="' + result + '" class="lazy" alt="" style="max-width:90%">') //图片链接(base64) }); } , done: function (res, index, upload) { if (res.code == 0) { //上传成功 var InputTag = $("#imgInput"); var oldInputStrList = InputTag.val().split(","); oldInputStrList[currentIndex] = res.data[0].fp_relative; var newInputStr = oldInputStrList.join(","); InputTag.val(newInputStr); $currentTr.children().eq(1).text("修改成功"); $currentTr.children().eq(2).html(""); } else { this.error(index, upload); } } , error: function (index, upload) { //演示失败状态,并实现重传 var fileHtml = '<span style="color: #FF5722;">上传失败 <a class="layui-btn layui-btn-xs demo-reload" style="width:50px;height:30px;text-align:center;line-height:30px;">重试'; $currentTr.children().eq(2).html(fileHtml); $currentTr.find('.demo-reload').on('click', function () { uploadEdit.upload(); }); } }); }); // 处理图片的删除 demoListView.on("click", '.delete-btn', function () { var delid = this.id; var currentDelIndex = parseInt(delid.split("_")[1]); var theCurrentTr = $(this).parent().parent(); // 更新表格中当前行后面每一行的序号 // 找到当前行后面的每一行 theCurrentTr.nextAll().each(function () { // each中的this和外面的this不一样了! var oldCsid = $(this).children().eq(2).find(".edit-btn").attr("csid"); var oldStarid = $(this).children().eq(2).find(".edit-btn").attr("startid"); var oldChoiceid = $(this).children().eq(2).find(".choice-btn").attr("id"); var oldUploadid = $(this).children().eq(2).find(".upload-btn").attr("id"); var oldDelid = $(this).children().eq(2).find(".delete-btn").attr("id"); if (oldDelid && oldCsid) { $(this).children().eq(2).find(".edit-btn").attr("csid", oldCsid.split("_")[0] + "_" + (oldCsid.split("_")[1] - 1)); $(this).children().eq(2).find(".edit-btn").attr("startid", oldStarid.split("_")[0] + "_" + (oldStarid.split("_")[1] - 1)); $(this).children().eq(2).find(".choice-btn").attr("id", oldChoiceid.split("_")[0] + "_" + (oldChoiceid.split("_")[1] - 1)); $(this).children().eq(2).find(".upload-btn").attr("id", oldUploadid.split("_")[0] + "_" + (oldUploadid.split("_")[1] - 1)); $(this).children().eq(2).find(".delete-btn").attr("id", oldDelid.split("_")[0] + "_" + (oldDelid.split("_")[1] - 1)); } }); // 找到当前行,删除 theCurrentTr.remove(); // 修改新的input框中的值 var delInputTag = $("#imgInput"); var oldDelInputStrList = delInputTag.val().split(","); oldDelInputStrList.splice(currentDelIndex, 1); var delnewInputStr = oldDelInputStrList.join(","); delInputTag.val(delnewInputStr); // 修改全局可上传文件的总个数 var $currentTotal = demoListView.data("choiceTotal"); demoListView.data("choiceTotal", $currentTotal - 1); }); // 填充管理员详情 $.ajax({ url: "/web/api/seller/detail?seller_id={{seller_id}}", type: "get", dataType: "json", success: function (response) { console.log(response); $("#qrshow").attr("src", response.data.qrcode_url); var faceList = response.data.face_url_list; demoListView.data("choiceTotal", faceList.length); if (faceList) { for (var i = 0; i < faceList.length; i++) { var trEle = document.createElement("tr"); var trHtml = '<td><img src="/static/imghwm/default1.png" data-src="' + faceList[i] + '" class="lazy" alt="" style="max-width:90%">' + '<td>等待修改<td><button type="button" class="layui-btn layui-btn-sm edit-btn" csid="choice_' + i + '" startid="startUpload_' + i + '">修改<button type="button" class="layui-btn layui-btn-normal layui-btn-sm layui-hide choice-btn" id="choice_' + i + '" style="margin-right: 10px;">选择图片<button type="button" class="layui-btn layui-btn-sm layui-hide upload-btn" id="startUpload_' + i + '">上传' + '<button type="button" class="layui-btn layui-btn-sm delete-btn" id="delete_' + i + '">删除'; trEle.innerHTML = trHtml; $("#imgList").append(trEle); } } form.val("updateForm", { "seller_id": response.data.id, "name": response.data.name, "code": response.data.code, "address": response.data.address, "contact": response.data.contact, "cli_qrcode": response.data.cli_qrcode, "old_cli_qrcode": response.data.cli_qrcode, "face_img": response.data.face_img, "old_face_img": response.data.face_img }); form.render(); } }); // 绑定提交事件 form.on("submit(addObject)", function (data) { $.ajax({ url: "/web/api/seller/update", type: "post", data: data.field, dataType: "json", success: function (response) { if (response["code"] == 0) { layer.msg("更新成功", { icon: 1, time: 1500 // 1.5秒,默认三秒 }, function () { // 关闭回调,关闭层刷新页面 var index = parent.layer.getFrameIndex(window.name); // 先得到当前iframe层的索引 parent.layer.close(index); }); } else { layer.msg(response["msg"], { icon: 1, time: 1500 // 1.5秒,默认三秒 }); } return false; }, error: function (response) { layer.msg(response["msg"], { icon: 1, time: 1500 // 1.5秒,默认三秒 }); return false; } }); return false; // 关闭表单提交(注意:此处不能省略,此处不能省略,此处不能省略。。。 否则页面刷新有问题) }); }); </script>
更多layui知識請關注 layui使用教程欄位。
以上是layui檔案上傳、預覽及修改方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!
陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
刺客信條陰影:貝殼謎語解決方案
3 週前ByDDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
2 週前ByDDD
在哪裡可以找到原子中的起重機控制鑰匙卡
3 週前ByDDD
<🎜>:死鐵路 - 如何完成所有挑戰
4 週前ByDDD
Atomfall指南:項目位置,任務指南和技巧
4 週前ByDDD

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver Mac版
視覺化網頁開發工具

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中