分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

阿里云附件文件流的形式上传、下载

发布时间:2023-09-06 01:30责任编辑:白小东关键词:暂无标签

1、View附件上传

 

@using (Html.BeginForm("StartUpLoad", "ReferenceDocument", new {id = ViewBag.Id}, FormMethod.Post, new {enctype = "multipart/form-data"}))
???????{
???????????<input type="file" name="filedata" id="fileUpLoad"class="btn btn-success"/><br/>
???????????<input type="submit" value="提交" id="submitFile" class="btn btn-success"/>
???????????<span id="warning" style="color: red; font-size: large;"></span>
???????}

<script>
???var fileTypeBool;
???var fileSizeBool;
???var file = getNameFromPath($("#fileUpLoad").val());
???if (file == null) {
???????$("#submitFile").attr("disabled", true);
???}

???//判断文件大小
???function GetFileSize(fileid) {
???????var fileSize = 0;
???????fileSize = $("#" + fileid)[0].files[0].size;
???????fileSize = fileSize / 1048576;
???????return fileSize;
???}

???//根据路径得到文件名
???function getNameFromPath(strFilepath) {
???????var objRe = new RegExp(/([^\/\\]+)$/);
???????var strName = objRe.exec(strFilepath);

???????if (strName == null) {
???????????return null;
???????} else {
???????????return strName[0];
???????}
???}

???//当更换文件时触发Change事件对其文件类型和文件大小进行验证:
???$("#fileUpLoad").change(function() {
???????var file = getNameFromPath($(this).val());

???????if (file != null) {
???????????var errors = $(document).find(".field-validation-error");
???????????$.each(errors,
???????????????function(k, v) {
???????????????????if ($(v).attr("data-valmsg-for") === "fileUpLoad") {
???????????????????????$(v).hide();
???????????????????}
???????????????});
???????????var extension = file.substr((file.lastIndexOf(‘.‘) + 1));
???????????switch (extension) {
???????????case ‘pdf‘:
???????????????fileTypeBool = false;
???????????????break;
???????????default:
???????????????fileTypeBool = true;
???????????}
???????}
???????if (fileTypeBool) {
???????????$("#warning").html("只能上传扩展名为pdf的文件!");
???????????$("#submitFile").attr("disabled", true);
???????????return false;
???????} else {
???????????var size = GetFileSize(‘fileUpLoad‘);
???????????if (size > 10) {
???????????????fileSizeBool = true;
???????????????$("#warning").html("上传文件已经超过10兆!");
???????????????$("#submitFile").attr("disabled", true);
???????????} else {
???????????????fileSizeBool = false;
???????????????$("#submitFile").attr("disabled", false);
???????????????$("#warning").html("");
???????????}
???????}
???????return false;
???});

???$("#submitFile").submit(function () {
???????var file = getNameFromPath($(this).val());

???????alert(fileTypeBool);
???????alert(fileSizeBool);
???????if (fileTypeBool || fileSizeBool) {
???????????return false;
???????}
???????$("input[type=‘text‘]").each(function(k, v) {
???????????if ($(v).length) {
???????????????$(v).siblings("span").hide();
???????????}
???????});
???????return false;
???});
</script>

2、控制器处理文件流

/// <summary>
???????/// 1、创建Oss服务实例
???????/// </summary>
???????/// <returns></returns>
???????private static OssClient CreatOssClient()
???????{
???????????return new OssClient(Config.OssConfig.EndpointUri, Config.OssConfig.AccessKeyId,
???????????????Config.OssConfig.AccessKeySecret);
???????}

???????/// <summary>
???????////2、pdf附件上传
???????/// </summary>
???????/// <param name="id">唯一标识</param>
???????/// <param name="filedata"></param>
???????/// <returns></returns>
???????[CustomAuthorize]
???????[HttpPost]
???????public ActionResult StartUpLoad(long id, HttpPostedFileBase filedata)
???????{
???????????try
???????????{
???????????????#region 判断文件大小、类型

???????????????const int maxContentLength = 1024 * 1024 * 10;
???????????????if (string.IsNullOrEmpty(filedata?.FileName) || filedata.ContentLength == 0)
???????????????{
???????????????????return HttpNotFound("附件不存在");
???????????????}
???????????????if (filedata.ContentLength > maxContentLength)
???????????????{
???????????????????throw new Exception($"上传图片过大,不能超过{maxContentLength / 1024}兆");
???????????????}
???????????????if (!filedata.ContentType.Equals("application/pdf"))
???????????????{
???????????????????throw new Exception("只能上传pdf文件");
???????????????}
???????????????var user = LoginFactory.GetCurrentLoginUser();
???????????????if (user == null) throw new ArgumentException("当前用户未登录");
???????????????var fileOssSaveName = $"{Guid.NewGuid().ToString()}.pdf";
???????????????var fielSqlSaveName = filedata.FileName;

???????????????#endregion

???????????????#region 保存文件到阿里云OSS

???????????????#region 初始化OSS实例

???????????????var bucketName = Config.OssConfig.ClimsBucketName;
???????????????var ossClient = CreatOssClient();

???????????????#endregion

???????????????if (!ossClient.DoesBucketExist(bucketName))
???????????????{
???????????????????throw new ArgumentException($"阿里云存储空间{bucketName}不存在");
???????????????}

???????????????#region 判断Oss是否存在模拟文件夹(文件名/)

???????????????const string folderName = "refdocfiles"; //存储文件的文件夹(refdocfiles/
???????????????if (!ossClient.DoesObjectExist(bucketName, folderName + "/"))
???????????????{
???????????????????using (var stream = new MemoryStream(new byte[0]))
???????????????????{
???????????????????????ossClient.PutObject(bucketName, folderName + "/", stream);
???????????????????}
???????????????}

???????????????#endregion

???????????????#region 使用inputStream上传文件

???????????????var metadata = new ObjectMetadata
???????????????{
???????????????????ContentEncoding = "utf-8",
???????????????????ContentType = "application/pdf"
???????????????};
???????????????var bytes = new byte[filedata.ContentLength];
???????????????filedata.InputStream.Read(bytes, 0, bytes.Length);
???????????????var putObject = ossClient.PutObject(bucketName, folderName + "/" + fileOssSaveName,
???????????????????new ByteArrayInputStream(bytes), metadata);

???????????????#endregion

???????????????#endregion

???????????????#endregion

???????????????#region 附件上传信息保存数据库

???????????????var document = new ReferenceDocument()
???????????????{
???????????????????Id = id,
???????????????????FileName = fielSqlSaveName,
???????????????????FilePath = folderName + $"/{fileOssSaveName}", //相对路径
???????????????????UpLoadUserId = user.UserId,
???????????????????UpLoadTime = DateTime.Now
???????????????};
???????????????RequestHelper.PostT("api/UploadRecord", document);

???????????????#endregion

???????????????return Content("<script>alert(‘技术依据附件上传成功!‘);window.open(‘" +
??????????????????????????????Url.Content(@"/ReferenceDocument/Index") +
??????????????????????????????"‘, ‘_self‘);</script>");
???????????}
???????????catch (Exception e)
???????????{
???????????????Console.WriteLine(e);
???????????????throw new Exception(e.Message);
???????????}
???????}


???????#region 附件下载

???????/// <summary>
???????/// 附件下载
???????/// </summary>
???????/// <param name="id"></param>
???????/// <returns></returns>
???????[CustomAuthorize]
???????public FileResult DownFile(long id)
???????{
???????????try
???????????{
???????????????var user = LoginFactory.GetCurrentLoginUser();
???????????????if (user == null)
???????????????{
???????????????????throw new ArgumentException("当前用户未登录");
???????????????}
???????????????var refDoc = ReferenceDocumentBll.Retrieve(id);
???????????????if (refDoc == null)
???????????????{
???????????????????throw new ArgumentException("未找到依据");
???????????????}

???????????????#region 初始化OSSClient实例

???????????????var bucketName = Config.OssConfig.ClimsBucketName;
???????????????var ossClient = CreatOssClient();
???????????????if (!ossClient.DoesObjectExist(bucketName, refDoc.FilePath))
???????????????{
???????????????????throw new ArgumentException("附件不存在");
???????????????}

???????????????#endregion

???????????????#region 文件读取

???????????????var fileObject = ossClient.GetObject(bucketName, refDoc.FilePath);
???????????????return File(fileObject.Content, "application/octet-stream",
???????????????????HttpUtility.UrlEncode(refDoc.FileName, Encoding.UTF8));

???????????????#endregion
???????????}
???????????catch (Exception ex)
???????????{
???????????????throw new Exception(ex.ToString());
???????????}
???????}

???????#endregion

阿里云附件文件流的形式上传、下载

原文地址:http://www.cnblogs.com/william-CuiCui0705/p/8031288.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved