2014-04-23 3 views
0

자바 스크립트를 사용하여 업로드 된 파일을 보려면 아래 코드를 사용하고 있습니다. 그것은 가짜 경로를 표시하므로 서버 경로에 파일을 업로드 할 수 없습니다. server.mappath 폴더에 이미지를 업로드하도록 도와주세요.자바 스크립트에서 서버로 이미지 업로드

<input type='file' name='file' id='file' value='Choose Photo' accept='image/png,image/jpeg' onchange='handleFileSelect(this);' /> 

<script type="text/javascript"> 
function handleFileSelect(input) { 
    try { 

     if (input.files && input.files[0]) { 
      var reader = new FileReader(); 

      reader.onload = function (e) { 
       document.getElementById('hf_image').value = e.target.result 
       $('#preview').attr('src', document.getElementById('hf_image').value); 
      } 

      reader.readAsDataURL(input.files[0]); 
     } 

    } 
    catch (ex) { 
     alert('Image Preview : ' + ex.Message); 
    } 
} 

</script> 
+0

당신은'WebForm' 또는'MVC'에 있습니까 ?? – Bellash

+0

WebFrom 만 사용하고 있습니다. – user3085540

답변

0
var attachments={}; 
function imageSelected(myFiles){ 
for (var i = 0, f; f = myFiles[i]; i++) { 
    var imageReader = new FileReader(); 
    imageReader.onload = (function(aFile){ 
     return function(e){ 
      var tempFileData=e.target.result; 
      attachments[aFile.name]={}; 
      attachments[aFile.name]["content_type"]=tempFileData.split(",")[0].split(":")[1].split(";")[0]; 
      attachments[aFile.name]["data"]=tempFileData.split(",")[1]; 

     }; 
    })(f); 
    imageReader.readAsDataURL(f); 
} 

}

<input type='file' onchange="imageSelected(this.files)"> 

위의 코드는 첨부 JSON 파일 정보

+0

답장을 보내 주셔서 감사합니다. 나는이 분야에서 새로운 사람이다. 나는 폴더에 이미지를 저장하고 싶다. – user3085540

0

당신이 AjaxFileUploader를 사용하지 않는 이유를 보유하고 당신을 위해 도움이 될 수 있습니다, 그것은 사용하기 쉬운

대상에 접근하려면 다음 단계를 따르십시오.

1 단계 :

head 태그에 dRAG Jquery 파일.

이 코드를 자바 스크립트 파일에 추가하고 페이지의 머리 부분으로 드래그하십시오.

jQuery.extend({ 
createUploadIframe: function (id, uri) { 
    //create frame 
    var frameId = 'jUploadFrame' + id; 
    var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"'; 
    if (window.ActiveXObject) { 
     if (typeof uri == 'boolean') { 
      iframeHtml += ' src="' + 'javascript:false' + '"'; 

     } 
     else if (typeof uri == 'string') { 
      iframeHtml += ' src="' + uri + '"'; 

     } 
    } 
    iframeHtml += ' />'; 
    jQuery(iframeHtml).appendTo(document.body); 

    return jQuery('#' + frameId).get(0); 
}, 
createUploadForm: function (id, fileElementId, data) { 
    //create form 
    var formId = 'jUploadForm' + id; 
    var fileId = 'jUploadFile' + id; 
    var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>'); 
    if (data) { 
     for (var i in data) { 
      jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form); 
     } 
    } 
    var oldElement = jQuery('#' + fileElementId); 
    var newElement = jQuery(oldElement).clone(); 
    jQuery(oldElement).attr('id', fileId); 
    jQuery(oldElement).before(newElement); 
    jQuery(oldElement).appendTo(form); 



    //set attributes 
    jQuery(form).css('position', 'absolute'); 
    jQuery(form).css('top', '-1200px'); 
    jQuery(form).css('left', '-1200px'); 
    jQuery(form).appendTo('body'); 
    return form; 
}, 

ajaxFileUpload: function (s) { 
    // TODO introduce global settings, allowing the client to modify them for all requests, not only timeout   
    s = jQuery.extend({}, jQuery.ajaxSettings, s); 
    var id = new Date().getTime() 
    var form = jQuery.createUploadForm(id, s.fileElementId, (typeof (s.data) == 'undefined' ? false : s.data)); 
    var io = jQuery.createUploadIframe(id, s.secureuri); 
    var frameId = 'jUploadFrame' + id; 
    var formId = 'jUploadForm' + id; 
    // Watch for a new set of requests 
    if (s.global && !jQuery.active++) { 
     jQuery.event.trigger("ajaxStart"); 
    } 
    var requestDone = false; 
    // Create the request object 
    var xml = {} 
    if (s.global) 
     jQuery.event.trigger("ajaxSend", [xml, s]); 
    // Wait for a response to come back 
    var uploadCallback = function (isTimeout) { 
     var io = document.getElementById(frameId); 
     try { 
      if (io.contentWindow) { 
       xml.responseText = io.contentWindow.document.body ? io.contentWindow.document.body.innerHTML : null; 
       xml.responseXML = io.contentWindow.document.XMLDocument ? io.contentWindow.document.XMLDocument : io.contentWindow.document; 

      } else if (io.contentDocument) { 
       xml.responseText = io.contentDocument.document.body ? io.contentDocument.document.body.innerHTML : null; 
       xml.responseXML = io.contentDocument.document.XMLDocument ? io.contentDocument.document.XMLDocument : io.contentDocument.document; 
      } 
     } catch (e) { 
      jQuery.handleError(s, xml, null, e); 
     } 
     if (xml || isTimeout == "timeout") { 
      requestDone = true; 
      var status; 
      try { 
       status = isTimeout != "timeout" ? "success" : "error"; 
       // Make sure that the request was successful or notmodified 
       if (status != "error") { 
        // process the data (runs the xml through httpData regardless of callback) 
        var data = jQuery.uploadHttpData(xml, s.dataType); 
        // If a local callback was specified, fire it and pass it the data 
        if (s.success) 
         s.success(data, status); 

        // Fire the global callback 
        if (s.global) 
         jQuery.event.trigger("ajaxSuccess", [xml, s]); 
       } else 
        jQuery.handleError(s, xml, status); 
      } catch (e) { 
       status = "error"; 
       jQuery.handleError(s, xml, status, e); 
      } 

      // The request was completed 
      if (s.global) 
       jQuery.event.trigger("ajaxComplete", [xml, s]); 

      // Handle the global AJAX counter 
      if (s.global && ! --jQuery.active) 
       jQuery.event.trigger("ajaxStop"); 

      // Process result 
      if (s.complete) 
       s.complete(xml, status); 

      jQuery(io).unbind() 

      setTimeout(function() { 
       try { 
        jQuery(io).remove(); 
        jQuery(form).remove(); 

       } catch (e) { 
        jQuery.handleError(s, xml, null, e); 
       } 

      }, 100) 

      xml = null 

     } 
    } 
    // Timeout checker 
    if (s.timeout > 0) { 
     setTimeout(function() { 
      // Check to see if the request is still happening 
      if (!requestDone) uploadCallback("timeout"); 
     }, s.timeout); 
    } 
    try { 

     var form = jQuery('#' + formId); 
     jQuery(form).attr('action', s.url); 
     jQuery(form).attr('method', 'POST'); 
     jQuery(form).attr('target', frameId); 
     if (form.encoding) { 
      jQuery(form).attr('encoding', 'multipart/form-data'); 
     } 
     else { 
      jQuery(form).attr('enctype', 'multipart/form-data'); 
     } 
     jQuery(form).submit(); 

    } catch (e) { 
     jQuery.handleError(s, xml, null, e); 
    } 

    jQuery('#' + frameId).load(uploadCallback); 
    return { abort: function() { } }; 

}, 

uploadHttpData: function (r, type) { 
    var data = !type; 
    data = type == "xml" || data ? r.responseXML : r.responseText; 
    // If the type is "script", eval it in global context 
    if (type == "script") 
     jQuery.globalEval(data); 
    // Get the JavaScript object, if JSON is used. 
    if (type == "json") 
     eval("data = " + data); 
    // evaluate scripts within html 
    if (type == "html") 
     jQuery("<div>").html(data).evalScripts(); 

    return data; 
} 

})이 같은

뭔가 :

<script src="Scripts/jquery-1.7.2.min.js" type="text/javascript"></script> 
<script src="Scripts/fileUploader.js" type="text/javascript"></script> 

2 단계 : 몸 페이지에이 태그를 추가합니다.

<input id="fileToUpload" type="file" size="45" name="fileToUpload" /> 
<button id="btnUploadNewLicense" onclick="return ajaxFileUpload('New');"> 
    Upload</button><br /> 
<div id="loading" style="display: none;"> 
    Please wait...</div> 

3 단계 : 은 프로젝트 루트에 "FileUpload.ashx"라는 이름의 일반 핸들러 파일을 추가, 는 "FileUplod.ashx"에이 다음 코드를 추가

public void ProcessRequest(HttpContext context) 
    { 
     HttpRequest request = context.Request; 
     HttpResponse response = context.Response; 
     string action = request["Action"]; 
     switch (action) 
     { 
      case "New": 
       string result = "failed"; 
       try 
       { 
        string fileName = SaveCaper(context); 
        result = "successed"; 
        response.Write("{\"result\":" + result.ToString().ToLower() + "}"); 
       } 
       catch 
       { 
        response.Write("{\"result\":" + result.ToString().ToLower() + "}"); 
       } 
       break; 
      default: 
       throw new Exception("Invalid sort column name!."); 
     } 
    } 
    private string SaveCaper(HttpContext context) 
    { 
     string fileName = string.Empty; 
     string path = context.Server.MapPath("~/NewImages"); 
     if (!Directory.Exists(path)) 
      Directory.CreateDirectory(path); 
     try 
     { 
      var file = context.Request.Files[0]; 
      if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE") 
      { 
       string[] files = file.FileName.Split(new char[] { '\\' }); 
       fileName = files[files.Length - 1]; 
      } 
      else 
      { 
       fileName = file.FileName; 
      } 
      string strFileName = fileName; 
      fileName = Path.Combine(path, fileName); 
      try 
      { 
       file.SaveAs(fileName); 
      } 
      catch (Exception exp) 
      { 
       //log the exception 
      } 
     } 
     catch (Exception exp) 
     { 
      //log the exception 
     } 
     return fileName; 
    } 
    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 

또한 당신이 필요 System.IO를 처리기 코드의 맨 위에 추가하십시오.

4 단계 : 당신의 JS 파일 프로토 타입

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
    function ajaxFileUpload(mode) { 
     var fupl = 'fileToUpload'; 
     var fileName = $('#fileToUpload').val(); 
     if (fileName == "" || fileName == null)//if user doesn't select an image 
     { 
      $("#loading").html(""); 
      $("#loading").append("<br/><b>Please select an image...</b>"); 
     } 
     else { 
      var vars = fileName.split("."); //get file extension. 
      if (vars[1].toString().toLowerCase() != "jpg") {//check the file extension. 
       $("#loading").html(""); 
       $("#loading").append("<br/>The image format is not valid !."); 
       return false; 
      } 
      $("#loading").ajaxStart(function() { $('#dialogUpdateLicense :input').attr('disabled', true); $(this).show(); }) 
     .ajaxComplete(function() { $('#dialogUpdateLicense :input').removeAttr('disabled'); }); 
      $("#loading").html(""); 
      $("#loading").append("<br/><b>Please wait...</b>"); 
      $.ajaxFileUpload 
     ({ 
      url: 'FileHandler.ashx', 
      secureuri: false, 
      fileElementId: 'fileToUpload', 
      dataType: 'json', 
      data: { Action: mode }, 
      success: function (data) { 
       if (data.result == "successed") 
        $("#loading").html("The image uploaded successfully!."); 
      }, 
      error: function (data, e) { 
       $("#loading").html("An error occured!."); 
      } 
     }) 
     } 
     return false; 
    } 
</script> 

모든 일을 시험하고 내가 당신을 도움이되기를 바랍니다 나

제대로 작동 후 머리에이 스크립트를 추가합니다.

+0

POST를 시도 할 때 403 처리기에 대한 금지 된 오류 –

관련 문제