>  기사  >  웹 프론트엔드  >  나만의 Ajax 이미지 업로드 만들기

나만의 Ajax 이미지 업로드 만들기

亚连
亚连원래의
2018-05-25 15:51:531707검색

이미지 업로드 플러그인이 필요하지만 내 요구 사항을 충족하고 사용하기 쉬운 온라인 플러그인이 없습니다. 그래서 제가 직접 작성했습니다. 필요한 친구들이 참고하면 됩니다

오늘은 이미지 업로드 플러그인이 필요한데 온라인상에서 제 요구사항을 충족하고 사용하기 쉬운 플러그인이 없습니다. 그래서 제가 직접 하나 썼습니다.

방법 1, 타사 플러그인 없이 jquery 코드만 사용합니다. 코드는 다음과 같습니다.

<p> 
<label>上传图片</label> 
<input class="ke-input-text" type="text" id="url" value="" readonly="readonly" /> 
<input type="button" id="uploadButton" value="Upload" /> 
</p> 
<script type="text/javascript"> 
$(function() { 
$(&#39;.inp_fileToUpload&#39;).change(function() { 
var formdata = new FormData(); 
var v_this = $(this); 
var fileObj = v_this.get(0).files; 
url = "/upload/upload_json.ashx"; 
//var fileObj=document.getElementById("fileToUpload").files; 
formdata.append("imgFile", fileObj[0]); 
jQuery.ajax({ 
url : url, 
type : &#39;post&#39;, 
data : formdata, 
cache : false, 
contentType : false, 
processData : false, 
dataType : "json", 
success : function(data) { 
if (data.error == 0) { 
v_this.parent().children(".img_upload").attr("src", data.url); 
//$("#img").attr("src",data.url); 
} 
} 
}); 
return false; 
}); 
}); 
</script>

이 방법의 단점: IE689는 formdata를 지원하지 않기 때문에 이 방법은 IE9 이하를 지원하지 않습니다.

방법 2: ajaxfileupload.js 플러그인 사용
ajaxfileupload.js
html 코드:

<p> 
<label>ajax上传</label> 
<input type="file" name="fileToUpload" id="fileToUpload" class="inp_fileToUpload" multiple="multiple"/> 
<img src="$web.site$web.tpl#**#adminht/images/lb_head.jpg" width="30px" height="30px" class="img_upload" id="img" /> 
</p> 
<p> 
<label>最新修改人员:</label> 
<input readonly="readonly" type="text" size="30" /> 
</p> 
<p> 
<script type="text/javascript"> 
$(function() { 
$(".inp_fileToUpload").live("change", function() {//现在这个已经适用于多个file表单。 
ajaxFileUpload($(this).attr("id"), $(this).parent().children(".img_upload").attr("id")); 
}) 
}) 
function ajaxFileUpload(file_id, img_id) { 
jQuery.ajaxFileUpload({ 
url : &#39;/upload/upload_json.ashx&#39;, //用于文件上传的服务器端请求地址 
secureuri : false, //是否需要安全协议,一般设置为false 
fileElementId : file_id, //文件上传域的ID 
dataType : &#39;json&#39;, //返回值类型 一般设置为json 
success : function(data, status)//服务器成功响应处理函数 
{ 
if (data.error == 0) { 
$("#" + img_id).attr("src", data.url); 
} else { 
alert(data.message); 
} 
}, 
error : function(data, status, e)//服务器响应失败处理函数 
{ 
alert(e); 
} 
}) 
return false; 
} 
</script> 
</p> 
</p>


지침 : 이 방법은 현재 IE8/9, Google을 지원하도록 테스트되었으며 방법 1보다 호환성이 더 좋습니다. 방법 2를 사용하는 것이 좋습니다.

파일 업로드 백그라운드 처리 코드(asp.net 버전)

<%@ webhandler Language="C#" class="Upload" %> 
using System; 
using System.Collections; 
using System.Web; 
using System.IO; 
using System.Globalization; 
using LitJson; 
public class Upload : IHttpHandler 
{ 
private HttpContext context; 
public void ProcessRequest(HttpContext context) 
{ 
String aspxUrl = context.Request.Path.Substring(0, context.Request.Path.LastIndexOf("/") + 1); 
//文件保存目录路径 
String savePath = "attached/"; 
//文件保存目录URL 
String saveUrl = aspxUrl + "attached/"; 
//定义允许上传的文件扩展名 
Hashtable extTable = new Hashtable(); 
extTable.Add("image", "gif,jpg,jpeg,png,bmp"); 
extTable.Add("flash", "swf,flv"); 
extTable.Add("media", "swf,flv,mp3,wav,wma,wmv,mid,avi,mpg,asf,rm,rmvb"); 
extTable.Add("file", "doc,docx,xls,xlsx,ppt,htm,html,txt,zip,rar,gz,bz2"); 
//最大文件大小 
int maxSize = 1000000; 
this.context = context; 
HttpPostedFile imgFile = context.Request.Files["imgFile"]; 
if (imgFile == null) 
{ 
showError("请选择文件。"); 
} 
String dirPath = context.Server.MapPath(savePath); 
if (!Directory.Exists(dirPath)) 
{ 
showError("上传目录不存在。"); 
} 
String dirName = context.Request.QueryString["dir"]; 
if (String.IsNullOrEmpty(dirName)) { 
dirName = "image"; 
} 
if (!extTable.ContainsKey(dirName)) { 
showError("目录名不正确。"); 
} 
String fileName = imgFile.FileName; 
String fileExt = Path.GetExtension(fileName).ToLower(); 
if (imgFile.InputStream == null || imgFile.InputStream.Length > maxSize) 
{ 
showError("上传文件大小超过限制。"); 
} 
if (String.IsNullOrEmpty(fileExt) || Array.IndexOf(((String)extTable[dirName]).Split(&#39;,&#39;), fileExt.Substring(1).ToLower()) == -1) 
{ 
showError("上传文件扩展名是不允许的扩展名。\n只允许" + ((String)extTable[dirName]) + "格式。"); 
} 
//创建文件夹 
dirPath += dirName + "/"; 
saveUrl += dirName + "/"; 
if (!Directory.Exists(dirPath)) { 
Directory.CreateDirectory(dirPath); 
} 
String ymd = DateTime.Now.ToString("yyyyMMdd", DateTimeFormatInfo.InvariantInfo); 
dirPath += ymd + "/"; 
saveUrl += ymd + "/"; 
if (!Directory.Exists(dirPath)) { 
Directory.CreateDirectory(dirPath); 
} 
String newFileName = DateTime.Now.ToString("yyyyMMddHHmmss_ffff", DateTimeFormatInfo.InvariantInfo) + fileExt; 
String filePath = dirPath + newFileName; 
imgFile.SaveAs(filePath); 
String fileUrl = saveUrl + newFileName; 
Hashtable hash = new Hashtable(); 
hash["error"] = 0; 
hash["url"] = fileUrl; 
context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8"); 
context.Response.Write(JsonMapper.ToJson(hash)); 
context.Response.End(); 
} 
private void showError(string message) 
{ 
Hashtable hash = new Hashtable(); 
hash["error"] = 1; 
hash["message"] = message; 
context.Response.AddHeader("Content-Type", "text/html; charset=UTF-8"); 
context.Response.Write(JsonMapper.ToJson(hash)); 
context.Response.End(); 
} 
public bool IsReusable 
{ 
get 
{ 
return true; 
} 
} 
}

위 내용은 제가 모두를 위해 정리한 내용이므로 앞으로 모든 분들께 도움이 되기를 바랍니다.

관련 기사:

무한 계층 및 트리 구조 데이터 추가, 삭제 및 수정

Ajax의 몇 가지 사소한 문제에 대해 논의

ajax 콜백을 사용하여 브라우저 차단을 방지하기 위해 새 양식 열기 효과적인 방법_AJAX 관련

위 내용은 나만의 Ajax 이미지 업로드 만들기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.