c# - 如何通过ajax从c#接收文件
问题描述
我正在尝试通过 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";
}
解决方案
[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")%>",
推荐阅读
- python - Python 网络钩子 API
- r - How to link 2 widget options dynamically in R Shiny?
- javascript - 应该用间隔替换多少超时?
- sql - SQL 中有没有一种方法可以更改地理列中的经纬度值倒置的值?
- reactjs - 将全栈应用程序部署到 Heroku 时如何解决 Eslint 错误?
- typescript - 如何声明 boolean 或 () => boolean 类型的属性
- python-3.x - wxPython 对象没有属性
- laravel - 如何在 Laravel 的三元运算符中使用 HREF
- c# - asp net core如何使用公共交通将数据从http get请求发布到Rabbit MQ?
- ios - Flutter 项目中“处理 Podfile 的安装后挂钩时发生错误”