【问题标题】:Asp.net upload file using XMLHttpRequest c# serverAsp.net使用XMLHttpRequest c#服务器上传文件
【发布时间】:2014-01-10 18:34:00
【问题描述】:

我有以下客户端功能:

function UploadFile() {
    var formData = new FormData();
    var file = document.getElementById("file").files[0];
    formData.append("file", file);
    var uploadServerSideScriptPath = "Login.aspx/Img_Upload";
    var xhr = new XMLHttpRequest();

    xhr.open("POST", uploadServerSideScriptPath, true);
    xhr.setRequestHeader("Content-Type", "multipart/form-data");
    xhr.setRequestHeader("X-File-Name", file.name);
    xhr.setRequestHeader("X-File-Size", file.size);
    xhr.setRequestHeader("X-File-Type", file.type);
    xhr.send(formData);
}

服务器端是:

[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public void Img_Upload()
{
    HttpContext postedContext = HttpContext.Current;
    HttpPostedFile file = postedContext.Request.Files[0];

    string name = file.FileName;
    byte[] binaryWriteArray = new
    byte[file.InputStream.Length];
    file.InputStream.Read(binaryWriteArray, 0,
    (int)file.InputStream.Length);

    FileInfo file_Info = new FileInfo(file.FileName);
    string ext = file_Info.Extension;


    string file_Name = Guid.NewGuid().ToString() + "_" + DateTime.Now.Day + DateTime.Now.Month + DateTime.Now.Year + ext;

    FileStream objfilestream = new FileStream(Server.MapPath("img//profilePIC//" + file_Name), FileMode.Create, FileAccess.ReadWrite);
    objfilestream.Write(binaryWriteArray, 0,
    binaryWriteArray.Length);
    objfilestream.Close();

}

我在 Img_Upload 中设置了一个断点,但它从未命中。 我使用了提琴手,请求似乎没问题。 任何想法为什么?

如果我使用 var uploadServerSideScriptPath = "Login.aspx",我会进入 page_load 函数。 问题是调用该页面上的特定方法。

【问题讨论】:

  • 您的网络方法不是静态的。改变它像 public static void Img_Upload()
  • 谢谢,我试过了,还是不行……:(
  • 你的web方法根本没有被调用或者你不能设置断点?
  • 我试过了: var xhr = new XMLHttpRequest(); xhr.open("POST", "Login.aspx/test"); xhr.send();调用 [WebMethod] public static void test(object obj) { string a = "test"; }也不行

标签: c# javascript asp.net file-upload xmlhttprequest


【解决方案1】:

尝试 getElementByID() 方法的 clientID 为

...

    function UploadFile() {
        var formData = new FormData();
        var file = document.getElementById("<%=file.ClientID%>").files[0];
...

【讨论】:

    【解决方案2】:

    我通过创建 .axd 处理程序并使用 ProcessRequest 解决了这个问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      相关资源
      最近更新 更多