Как получить файл из c # через ajax - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь отправить файл через ajax, и сохранить его невозможно, кто-то мне в помощь, я уже пробовал несколько сериализованных, но не один, который работает.acontinuauacion Я покажу вам код на стороне клиента и на стороне сервера, было бы полезно, если вы мне поможете, если я делаю это правильно или есть другой способ с [webmethod] сделать это

$("#btnCargar").on("click", function() {
  var filese = $("#fileComparendo")[0].files[0];
  var formData = new FormData();
  formData.append("archivo", filese);

  $.ajax({
    type: "POST",
    url: "<%=ResolveUrl("addcomp.aspx/prueba")%>",
    data: formData,
    contentType: false,
    processData: false,

    success: function(data) {
      alert(data);
      console.log("CallWM" + data.d);
      alert(data.d);
    },
    error: function(XMLHttpRequest, textStatus, errorThrown) {
      var err = eval("(" + XMLHttpRequest.responseText + ")");
      alert(err.Message)
      console.log("Ajax Error!");
    }
  });

});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<div class="row">
  <div class="col-md-4">
    <input type="text" id="txtPrueba" class="form-contrav" />
    <input type="file" class="file-name" id="fileComparendo" />
    <input type="button" class="btn btn-danger" value="Cargar" id="btnCargar" />
  </div>
</div>
[WebMethod]
public static  string prueba(HttpContext archivo)
{
   // var recipient = Request["Recipient"];
    var re =  HttpContext.Current.Request.Form["archivo"];
    archivo.Response.ContentType = "text/plain";

    string dirFullPath = HttpContext.Current.Server.MapPath("~/files/");
    string[] files;
    int numFiles;
    files = System.IO.Directory.GetFiles(dirFullPath);
    numFiles = files.Length;
    numFiles = numFiles + 1;
    string str_image = "";
    foreach (string s in archivo.Request.Files)
    {
        HttpPostedFile file = archivo.Request.Files[s];
        string fileName = file.FileName;
        string fileExtension = file.ContentType;

        if (!string.IsNullOrEmpty(fileName))
        {
            fileExtension = Path.GetExtension(fileName);
            str_image = "MyPHOTO_" + numFiles.ToString() + fileExtension;
            string pathToSave_100 = HttpContext.Current.Server.MapPath("~/files/") + str_image;
            file.SaveAs(pathToSave_100);
        }
    }
    archivo.Response.Write(str_image);
    return "hola";
}

1 Ответ

0 голосов
/ 26 ноября 2018

[WebMethod] может принимать только тип содержимого application / json, но вы можете использовать .ashx: https://stackoverflow.com/a/26273565/1429439

Добавить новый универсальный обработчик с именем Upload.ashx, а затем заменить ProcessRequest() на:

public void ProcessRequest(HttpContext archivo)
        {
            var re = HttpContext.Current.Request.Form["archivo"];
            archivo.Response.ContentType = "text/plain";

            string dirFullPath = HttpContext.Current.Server.MapPath("~/files/");
            string[] files;
            int numFiles;
            files = System.IO.Directory.GetFiles(dirFullPath);
            numFiles = files.Length;
            numFiles = numFiles + 1;
            string str_image = "";
            foreach (string s in archivo.Request.Files)
            {
                HttpPostedFile file = archivo.Request.Files[s];
                string fileName = file.FileName;
                string fileExtension = file.ContentType;

                if (!string.IsNullOrEmpty(fileName))
                {
                    fileExtension = System.IO.Path.GetExtension(fileName);
                    str_image = "MyPHOTO_" + numFiles.ToString() + fileExtension;
                    string pathToSave_100 = HttpContext.Current.Server.MapPath("~/files/") + str_image;
                    file.SaveAs(pathToSave_100);
                }
            }
            archivo.Response.Write(str_image);
        }

Обновите URL-адрес в $.ajax(), чтобы он указывал на Upload.ashx с помощью:

url: "<%=ResolveUrl("Upload.ashx")%>",
...