排名
1
文章
860
粉丝
112
评论
163
.net core自定义项目模板,创建自己的模板项目,使用命令行创建模板项目
尘叶心繁 : 可以可以讲真的我都想弄个模板
net core webapi post传递参数
庸人 :
确实坑哈,我也是下班好了好几次,发现后台传递对象是可以的,但...
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 : 已精
.net webapi 返回需要的字段,忽略某些字段,修改字段名等
雨雨雨雨雨辰 :
疯狂反射
百度编辑器自定义模板
庸人 : 我建议换个编辑器,因为现在百度富文本已经停止维护了,用tinymec...
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术
原
.net core , .net6,net9,webapi图片上传,多图上传,按照年月来存储图片,按月存储。微信小程序上传图片

代码如下
/// <summary>
/// 图片上传相关服务
/// </summary>
public class ImgController : FABaseApiController
{
private readonly IWebHostEnvironment _env;
/// <summary>
///
/// </summary>
/// <param name="env"></param>
public ImgController(IWebHostEnvironment env)
{
_env = env;
}
/// <summary>
/// 图片上传
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<ObjectResult> UploadImage()
{
// 注意requst的获取,这里自己封装了一层BaseApiController所以使用base.HttpContext.Request获取
// var request = HttpContext.Request;
var request = HttpContext.Request;
IFormFileCollection upfiles = request.Form.Files;
if (upfiles == null || upfiles.Count == 0)
{
return Failed("未选择任何文件");
}
// 只取第一个文件
IFormFile firstFile = upfiles.First();
// 使用注入的_env获取路径
string uploadDir = Path.Combine(_env.WebRootPath, "imgs", "uploadimgs");
// 创建月度子目录
string monthlyFolder = DateTime.Now.ToString("yyyy-MM");
string fullPath = Path.Combine(uploadDir, monthlyFolder);
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
}
try
{
// 验证文件类型
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".webp" };
var fileExt = Path.GetExtension(firstFile.FileName).ToLowerInvariant();
if (firstFile.Length == 0 || !allowedExtensions.Contains(fileExt))
{
return Failed("不支持的文件类型或空文件");
}
if (firstFile.Length > 10 * 1024 * 1024)
{
return Failed("单个文件大小不能超过10MB");
}
// 生成唯一文件名
string fileName = $"{Guid.NewGuid():N}{fileExt}";
string filePath = Path.Combine(fullPath, fileName);
// 使用异步写入提高性能
using (var stream = new FileStream(filePath, FileMode.Create))
{
await firstFile.CopyToAsync(stream);
await stream.FlushAsync();
}
// 返回带完整访问路径的结果
string baseUri = $"{Request.Scheme}://{Request.Host}/imgs/uploadimgs/{monthlyFolder}/";
string shortBaseUrl = $"/imgs/uploadimgs/{monthlyFolder}/";
var result = new
{
fileName = fileName,
monthlyFolderName = monthlyFolder,
fileNameAndFolderName = $"{monthlyFolder}/{fileName}",
shortFileUrl = shortBaseUrl + fileName,
fileUrl = baseUri + fileName,
// size = firstFile.Length
};
return Success(result);
}
catch (Exception ex)
{
// 记录错误日志(建议添加日志记录)
return Failed($"上传失败: {ex.Message}");
}
}
/// <summary>
/// 多图上传
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<ObjectResult> UploadImageMany()
{
// 注意requst的获取,这里自己封装了一层BaseApiController所以使用base.HttpContext.Request获取
// var request = HttpContext.Request;
var request = base.HttpContext.Request;
IFormFileCollection upfiles = request.Form.Files;
if (upfiles == null || upfiles.Count == 0)
{
return Failed("未选择任何文件");
}
// 获取安全的物理路径(跨平台兼容)
string uploadDir = Path.Combine(_env.WebRootPath, "imgs", "uploadimgs");
// 创建月度子目录
string monthlyFolder = DateTime.Now.ToString("yyyy-MM");
string fullPath = Path.Combine(uploadDir, monthlyFolder);
if (!Directory.Exists(fullPath))
{
Directory.CreateDirectory(fullPath);
}
List<string> savedFiles = new();
foreach (IFormFile formFile in upfiles)
{
// 验证文件类型
var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif", ".webp" };
var fileExt = Path.GetExtension(formFile.FileName).ToLowerInvariant();
if (formFile.Length == 0 || !allowedExtensions.Contains(fileExt))
{
continue; // 跳过无效文件
}
if (formFile.Length > 10 * 1024 * 1024)
{
return Failed("单个文件大小不能超过10MB");
}
try
{
// 生成唯一文件名
string fileName = $"{Guid.NewGuid():N}{fileExt}";
string filePath = Path.Combine(fullPath, fileName);
// 使用异步写入提高性能
using (var stream = new FileStream(filePath, FileMode.Create))
{
await formFile.CopyToAsync(stream);
await stream.FlushAsync();
}
savedFiles.Add(fileName);
}
catch (Exception ex)
{
// 记录错误日志(建议添加日志记录)
return Failed($"上传失败: {ex.Message}");
}
}
if (savedFiles.Count == 0)
{
return Failed("没有有效的图片文件");
}
// 返回带完整访问路径的结果(根据实际需求调整)
string baseUri = $"{Request.Scheme}://{Request.Host}/imgs/uploadimgs/{monthlyFolder}/";
string shortBaseUrl = $"/imgs/uploadimgs/{monthlyFolder}/";
var result = savedFiles.Select(f => new
{
fileName = f,
shortFileUrl = shortBaseUrl + f,
fileUrl = baseUri + f,
});
return Success(result);
}
}
uni-app,微信小程序端调用测试
// 上传清洗前照片
const uploadBeforeImage = () => {
uni.chooseImage({
count: 1,
success: (res) => {
beforeImages.value.push(res.tempFilePaths[0]);
console.log("开始上传图了!");
uploadFile(res.tempFilePaths[0]);
},
});
};
const uploadFile = (_filePath:any)=>{
uni.uploadFile({
// 请求接口地址
url: ApiBaseUrl + '/watertap/api/Img/UploadImage',
filePath: _filePath,
name: 'file',
header: {
'Authorization': `Bearer ${getToken()}`,
},
// 除了图片上传的额外数据
formData: {
'bucketName': 'WaterTapCollection',
'filePath': 'WaterTapCollection',
'fileType': '1'
},
success: (uploadFileRes:any) => {
// 下面是图片上传成功之后配合其他接口的操作
// state.UpLoadData.Sign = result.data.id
// submitUpload()
}
});
}
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739。有需要软件开发,或者学习软件技术的朋友可以和我联系~(Q:815170684)
评价