130 lines
3.8 KiB
C#
130 lines
3.8 KiB
C#
using Newtonsoft.Json.Linq;
|
|
using NPOI.HSSF.Record.Chart;
|
|
using Org.BouncyCastle.Asn1.Ocsp;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Web;
|
|
using System.Web.SessionState;
|
|
|
|
namespace FineUIPro.Web.AttachFile
|
|
{
|
|
/// <summary>
|
|
/// fileupload 的摘要说明
|
|
/// </summary>
|
|
public class fileupload : IHttpHandler, IRequiresSessionState
|
|
{
|
|
private void ResponseError(HttpContext context)
|
|
{
|
|
// 出错了
|
|
context.Response.StatusCode = 500;
|
|
context.Response.Write("No file");
|
|
}
|
|
|
|
public void ProcessRequest(HttpContext context)
|
|
{
|
|
context.Response.ContentType = "text/plain";
|
|
|
|
string owner = context.Request.Form["owner"];
|
|
string sessionName = owner.Split('|')[0];
|
|
string attachPath = owner.Split('|')[1];
|
|
|
|
string initFullPath = BLL.Funs.RootPath + attachPath;
|
|
if (!Directory.Exists(initFullPath))
|
|
{
|
|
Directory.CreateDirectory(initFullPath);
|
|
}
|
|
if (context.Request.Files.Count == 0)
|
|
{
|
|
ResponseError(context);
|
|
return;
|
|
}
|
|
|
|
if (String.IsNullOrEmpty(owner))
|
|
{
|
|
ResponseError(context);
|
|
return;
|
|
}
|
|
|
|
HttpPostedFile postedFile = context.Request.Files[0];
|
|
// 文件名完整路径
|
|
string fileName = postedFile.FileName;
|
|
// 文件名保存的服务器路径
|
|
string savedFileName = GetSavedFileName(fileName);
|
|
postedFile.SaveAs(context.Server.MapPath("~/" + attachPath + "/" + savedFileName));
|
|
|
|
string shortFileName = GetFileName(fileName);
|
|
string fileType = GetFileType(fileName);
|
|
int fileSize = postedFile.ContentLength;
|
|
|
|
|
|
JObject fileObj = new JObject();
|
|
string fileId = Guid.NewGuid().ToString();
|
|
|
|
fileObj.Add("name", shortFileName);
|
|
fileObj.Add("type", fileType);
|
|
fileObj.Add("savedName", savedFileName);
|
|
fileObj.Add("size", fileSize);
|
|
fileObj.Add("id", fileId);
|
|
|
|
SaveToDatabase(context, sessionName, fileObj);
|
|
|
|
context.Response.Write("Success");
|
|
}
|
|
|
|
private void SaveToDatabase(HttpContext context, string sessionName, JObject fileObj)
|
|
{
|
|
if (context.Session[sessionName] == null)
|
|
{
|
|
context.Session[sessionName] = new JArray();
|
|
}
|
|
|
|
JArray source = context.Session[sessionName] as JArray;
|
|
source.Add(fileObj);
|
|
|
|
context.Session[sessionName] = source;
|
|
}
|
|
|
|
|
|
private string GetFileType(string fileName)
|
|
{
|
|
string fileType = String.Empty;
|
|
int lastDotIndex = fileName.LastIndexOf(".");
|
|
if (lastDotIndex >= 0)
|
|
{
|
|
fileType = fileName.Substring(lastDotIndex + 1).ToLower();
|
|
}
|
|
|
|
return fileType;
|
|
}
|
|
|
|
private string GetFileName(string fileName)
|
|
{
|
|
string shortFileName = fileName;
|
|
int lastSlashIndex = shortFileName.LastIndexOf("\\");
|
|
if (lastSlashIndex >= 0)
|
|
{
|
|
shortFileName = shortFileName.Substring(lastSlashIndex + 1);
|
|
}
|
|
|
|
return shortFileName;
|
|
}
|
|
|
|
private string GetSavedFileName(string fileName)
|
|
{
|
|
fileName = fileName.Replace(":", "_").Replace(" ", "_").Replace("\\", "_").Replace("/", "_");
|
|
fileName = DateTime.Now.Ticks.ToString() + "_" + fileName;
|
|
|
|
return fileName;
|
|
}
|
|
|
|
|
|
public bool IsReusable
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
} |