调用:
封装类:
using Masuit.Tools.Models;
using Masuit.Tools.Systems;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Net.Http.Headers;
using YaseiAkira.AJ.Authorize;
using YaseiAkira.AJ.Util;
using YaseiAkira.AJ.Models;
using System.Text;
using YaseiAkira.AJ.Form;
using Yaseiakira.AJ.OSS.Aliyun;
namespace YaseiAkira.AJ.Upload
{
public static class Uploader
{
public class MediaItem
{
public long Id { get; set; }
public string Category { get; set; }
public long EndId { get; set; }
public string Name { get; set; }
public string Ext { get; set; }
public string Url { get; set; }
public DateTime CreateDate { get; set; }
public long Uploader { get; set; }
public bool SecretFile { get; set; }
}
private static readonly string _root = "/uploads";
public static readonly string SECRETDIR = "/secret/cert";
/// <summary>
/// 这个是每一次从Http请求的section中读出文件数据的大小,单位是Byte即字节,这里设置为1024的意思是,每次从Http请求的section数据流中读取出1024字节的数据到服务器内存中,然后写入下面targetFileStream的文件流中,可以根据服务器的内存大小调整这个值。这样就避免了一次加载所有上传文件的数据到服务器内存中,导致服务器崩溃。
/// </summary>
//const int FILE_WRITE_SIZE = 84975;
const int FILE_WRITE_SIZE = 849750;
public static readonly string[] ALLOWEXTS = new string[]
{
".jpg",".jpeg",".png",".ico",".bmp",".gif",".tif",".tga",".mp3",".wma",".ape",".flac",".aac",".amr",".m4a",".m4r",".ogg",".wav",".flv",".3gp",".rmvb",".rm",".swf",".mp4",".mkv",".avi",".mov",".wmv",".p12",".pem",".zip",".rar",".7z",".pdf",".xls",".xlsx",".doc",".docx",".ppt",".pptx",".cer"
};
private static readonly FormOptions _defaultFormOptions = new FormOptions();
public static PagedList<FileInfo> GetUploadedListByFolder(string name, int page = 1, int limit = 10)
{
var result = new List<FileInfo>();
var dirs = new List<DirectoryInfo>();
if (string.IsNullOrWhiteSpace(name))
{
dirs = new DirectoryInfo(Util.Util.MapPath(_root)).GetDirectories().ToList();
}
else
{
var local = Util.Util.MapPath($"{_root}/{name}", false);
if (Directory.Exists(local))
{
dirs.Add(new DirectoryInfo(local));
}
}
if (dirs.Count == 0)
{
return new PagedList<FileInfo>(new List<FileInfo>(), page, limit, 0);
}
foreach (var dir in dirs)
{
result.AddRange(dir.GetFiles());