Я играл со сценарием загрузки AJAX Valum: http://valums.com/ajax-upload/ а>
Это отвечает всем требованиям для меня, не используя ужасный флэш-объект swfupload для одного. У меня есть точка JS в моем сценарии .ashx (который я не могу отлаживать ни за деньги). Это то, что у меня есть в .ashx:
аватар публичного класса: IHttpHandler, System.Web.SessionState.IRequiresSessionState {
public void ProcessRequest (HttpContext context) {
//Debugger.Break();
string result = "{\"success\":true}";
string path = HttpContext.Current.Server.MapPath("/client/vault/" + Helpers.CurrentClientHash(context.Session["SessionHash"].ToString()) + "/users/" + context.Session["SessionHash"].ToString() + "/");
string saveLocation = string.Empty;
string fileName = string.Empty;
try
{
int length = 4096;
int bytesRead = 0;
Byte[] buffer = new Byte[length];
//This works with Chrome/FF/Safari
// get the name from qqfile url parameter here
Debugger.Break();
fileName = context.Request["params"];
Debug.Write(fileName);
saveLocation = context.Server.MapPath(path) + fileName;
try
{
using (FileStream fileStream = new FileStream(saveLocation, FileMode.Create))
{
do
{
bytesRead = context.Request.InputStream.Read(buffer, 0, length);
fileStream.Write(buffer, 0, bytesRead);
}
while (bytesRead > 0);
}
}
catch (UnauthorizedAccessException ex)
{
// log error hinting to set the write permission of ASPNET or the identity accessing the code
result = result.Replace("true","false, \"error\":" + ex.Message + " " + ex.InnerException + " " + ex.StackTrace.ToString());
}
}
catch
{
try
{
//This works with IE
fileName = Path.GetFileName(context.Request.Files[0].FileName);
saveLocation = context.Server.MapPath(path) + fileName;
context.Request.Files[0].SaveAs(saveLocation);
}
catch (Exception ex)
{
result = result.Replace("true", "false, \"error\":" + ex.Message + " " + ex.InnerException);
}
}
context.Response.Write(result);
}
public bool IsReusable {
get {
return false;
}
}
}
Этот код был любезно предложен другим пользователем скрипта Valum, потому что он поставляется с серверной частью PHP. Когда я запускаю загрузчик, я получаю это в консоли:
[uploader] responseText = {"успех":false, "ошибка":индекс вышел за пределы допустимого диапазона. Должно быть неотрицательным и меньше размера коллекции. Имя параметра: индекс }
... и загрузка, конечно, не удалась. Я уверен, что это как-то связано с FileStream
, но без полноценной отладки я не могу найти проблему. Я думаю, это может быть из-за того, что файл не подхватывается .ashx, но он находится в параметрах:
Итак, у меня два вопроса, если позволите:
- Может ли кто-нибудь сразу увидеть, где и почему я получаю исключение индекса?
- Если нет, то как я могу отладить эту вещь? Я не могу просто запустить отладчик из VS2010, потому что не загружается JS. Очевидно, я тоже не могу сразу перейти к ashx... Есть идеи?
Помощь приветствуется :)