'Not found' 使用 jquery 和处理程序 (ashx) 上传文件时出错
'Not found' error in upload file using jquery and handler(ashx)
UploadHandler.ashx.cs
public class UploadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
string dirFullPath = HttpContext.Current.Server.MapPath("~/Uploader/");
string[] files;
int numFiles;
files = System.IO.Directory.GetFiles(dirFullPath);
numFiles = files.Length;
numFiles = numFiles + 1;
string str_image = "";
foreach (string s in context.Request.Files)
{
HttpPostedFile file = context.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("~/Uploader/") + str_image;
file.SaveAs(pathToSave_100);
}
}
// database record update logic here ()
context.Response.Write(str_image);
}
catch (Exception ac)
{
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
JsCode
/Image Upload code
function sendFile(file) {
var formData = new FormData();
formData.append('file', $('#f_UploadImage')[0].files[0]);
$.ajax({
url: 'UploadHandler.ashx',
type: 'POST',
data: formData,
cache: false,
processData: false,
contentType: false,
success: function(result) {
if (result != 'error') {
var my_path = "Uploader/" + result;
$("#myUploadedImg").attr("src", my_path);
}
},
error: function(err) {
alert(err.statusText);
}
});
}
function callImgUploader() {
var _URL = window.URL || window.webkitURL;
$("#f_UploadImage").on('change', function() {
var file, img;
if ((file = this.files[0])) {
img = new Image();
img.onload = function() {
sendFile(file);
};
img.onerror = function() {
alert("Not a valid file:" + file.type);
};
img.src = _URL.createObjectURL(file);
}
});
}
注意:我的 Aspx 页面是不同的文件夹,Image Folder and UploadHandler.ashx.cs
是路由文件夹错误吗?
在 运行 ajax request
之后每次都会出现 Not-Found
错误如何解决。
谢谢。
如你所说
My Aspx page is different folder and Image Folder and UploadHandler.ashx.cs
你必须改变
url: 'UploadHandler.ashx',
到
url: '/UploadHandler.ashx',
否则它将尝试在与 ajax 页面相同的文件夹中搜索 UploadHandler.ashx
并给出 404。
你没有提到你使用的是哪个上传控件,我假设它是一个服务器端,你需要按如下方式访问它
改变
$('#f_UploadImage')
到
$('#<%= f_UploadImage.ClientID %>')
我认为问题出在 contentType 上
内容类型:'multipart/form-data',
感谢您的宝贵反馈,
现在我的问题已经解决了,
UploadHandler.ashx
设置中的问题
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UploadHandler.ashx.cs" Inherits="Customer.UploadHandler" %>
继承值与我的 UploadHandler.ashx.cs
命名空间不匹配,这是问题所在,现已修复。
谢谢大家
UploadHandler.ashx.cs
public class UploadHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
string dirFullPath = HttpContext.Current.Server.MapPath("~/Uploader/");
string[] files;
int numFiles;
files = System.IO.Directory.GetFiles(dirFullPath);
numFiles = files.Length;
numFiles = numFiles + 1;
string str_image = "";
foreach (string s in context.Request.Files)
{
HttpPostedFile file = context.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("~/Uploader/") + str_image;
file.SaveAs(pathToSave_100);
}
}
// database record update logic here ()
context.Response.Write(str_image);
}
catch (Exception ac)
{
}
}
public bool IsReusable
{
get
{
return false;
}
}
}
JsCode
/Image Upload code
function sendFile(file) {
var formData = new FormData();
formData.append('file', $('#f_UploadImage')[0].files[0]);
$.ajax({
url: 'UploadHandler.ashx',
type: 'POST',
data: formData,
cache: false,
processData: false,
contentType: false,
success: function(result) {
if (result != 'error') {
var my_path = "Uploader/" + result;
$("#myUploadedImg").attr("src", my_path);
}
},
error: function(err) {
alert(err.statusText);
}
});
}
function callImgUploader() {
var _URL = window.URL || window.webkitURL;
$("#f_UploadImage").on('change', function() {
var file, img;
if ((file = this.files[0])) {
img = new Image();
img.onload = function() {
sendFile(file);
};
img.onerror = function() {
alert("Not a valid file:" + file.type);
};
img.src = _URL.createObjectURL(file);
}
});
}
注意:我的 Aspx 页面是不同的文件夹,Image Folder and UploadHandler.ashx.cs
是路由文件夹错误吗?
在 运行 ajax request
之后每次都会出现 Not-Found
错误如何解决。
谢谢。
如你所说
My Aspx page is different folder and Image Folder and UploadHandler.ashx.cs
你必须改变
url: 'UploadHandler.ashx',
到
url: '/UploadHandler.ashx',
否则它将尝试在与 ajax 页面相同的文件夹中搜索 UploadHandler.ashx
并给出 404。
你没有提到你使用的是哪个上传控件,我假设它是一个服务器端,你需要按如下方式访问它
改变
$('#f_UploadImage')
到
$('#<%= f_UploadImage.ClientID %>')
我认为问题出在 contentType 上
内容类型:'multipart/form-data',
感谢您的宝贵反馈,
现在我的问题已经解决了,
UploadHandler.ashx
设置中的问题
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UploadHandler.ashx.cs" Inherits="Customer.UploadHandler" %>
继承值与我的 UploadHandler.ashx.cs
命名空间不匹配,这是问题所在,现已修复。
谢谢大家