загрузка файлов веб-сервисов jquery + asp.net - PullRequest
0 голосов
/ 01 августа 2011

У меня есть сайт веб-форм ASP.net, использующий jQuery для запуска методов сценариев в веб-службах asmx.
Теперь мне нужно добавить страницу, которая позволяет пользователю загружать файл, а также некоторые другие свойства (например, описание, дата создания и т. д.)

Я понимаю, что есть некоторые плагины jQuery для более удобной загрузки файла, чем элемент управления загрузчиком файлов MS (например, uploadify ).
однако,Я не могу понять, как:
1. заставить его работать со службами сценариев (я видел несколько примеров с использованием MVC или с использованием http-обработчик , но ни один из них не использует службу сценариев
2. В дополнение к самому файлу, я хочу иметь возможность отправлять больше данных вместе.

есть идеи?
спасибо

1 Ответ

0 голосов
/ 01 августа 2011

используйте это для той же задачи ...

загрузчик файлов

это код, который я написал для обработчика

<%@ WebHandler Language="C#" Class="Upload" %>

using System;
using System.Web;
using System.IO;
using System.Collections.Generic;

public class Upload : IHttpHandler
{

    public void ProcessRequest(HttpContext context)
    {
        try
        {
            string filePath = "uploads//";
            string newFilename = Guid.NewGuid().ToString();

            string nonIEFilename = context.Request.Headers["X-File-Name"];

            if (!string.IsNullOrEmpty(nonIEFilename) || context.Request.Files.Count > 0)
            {
                // if IE
                if (string.IsNullOrEmpty(nonIEFilename))
                {
                    HttpPostedFile file = context.Request.Files[0];
                    string[] filenamesplit = file.FileName.ToLower().Split('.');

                    newFilename = string.Format("{0}.{1}", newFilename, filenamesplit[1]);
                    file.SaveAs(context.Server.MapPath(string.Format("{0}{1}", filePath, newFilename)));
                    context.Response.Write(string.Format("{{\"path\":\"{0}uploads/{1}\"}}", context.Request.Url.AbsoluteUri.Replace("upload.ashx", string.Empty), newFilename));
                }
                else // non IE browsers
                {
                    string[] filenamesplit = nonIEFilename.ToLower().Split('.');
                    newFilename = string.Format("{0}.{1}", newFilename, filenamesplit[1]);

                    using (FileStream filestream = new FileStream(context.Server.MapPath(string.Format("{0}{1}", filePath, newFilename)), FileMode.OpenOrCreate))
                    {
                        Stream inputStream = context.Request.InputStream;
                        inputStream.CopyTo(filestream);
                        context.Response.Write(string.Format("{{\"path\":\"{0}uploads/{1}\"}}", context.Request.Url.AbsoluteUri.Replace("upload.ashx", string.Empty), newFilename));
                    }
                }
            }
        }
        catch (Exception ex)
        {
            Errors.addError("Upload.ProcessRequest()", ex);
        }
    }

    private bool IsAllowed(string file)
    {
        bool isAllowed = false;

        List<string> allowedExtensionsList = new List<string>();
        allowedExtensionsList.Add("jpg");
        allowedExtensionsList.Add("png");
        allowedExtensionsList.Add("gif");
        allowedExtensionsList.Add("bmp");

        string[] filenamesplit = file.ToLower().Split('.');

        for (int j = 0; j < allowedExtensionsList.Count; j++)
        {
            if (allowedExtensionsList[j] == filenamesplit[1].ToLower())
            {
                isAllowed = true;
            }
        }

        return isAllowed;
    }

    public bool IsReusable
    {
        get
        {
            return false;
        }
    }

}

У меня есть два случая для IE и других браузеров, потому что они публикуют файлы в разных формах

как для дополнительных данных, если это текст, вы можете отправить его через get при вызове службы

...