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

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

时间: 2024-10-06 15:40:23

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

百度云管家使用socks代理无法上传下载解决办法

像前几篇随笔描述的那样,笔者在学校里通过shadowsocks使用ipv6访问双栈vps来免费使用外网,但是在设置百度云管家的代理时发现:使用socks代理客户端可以访问文件列表,但是无法上传下载. 问题解决方法:下载使用http代理privoxy软件,只需要在主要配置文件里边加一行 forward-socks5 / 127.0.0.1:1080 . 保存即可. 这样privoxy就开始在127.0.0.1:8118端口代理http流量(通过将流量通通转发到我们以前安装过的shadowsocks

php文件以二进制形式上传并放入到数据库中

conn.php: <?php $id=mysql_connect('localhost','root','root'); mysql_select_db("db_database12",$id); mysql_query("set names gb2312"); ?> index.php: <html> <head> <meta http-equiv="Content-Type" content=&qu

使用HttpClient以文件流的方式上传文件(非multipartFormData方式)

@Test public void testAdd() throws IOException { HttpPost post = new HttpPost("http://localhost:8182/api/media/add?app=test&access_token=1234&fileName=测试一下.jpg&ContentType=image/jpeg"); HttpEntity entity = new FileEntity(new File(&qu

SFTP上传下载文件、文件夹常用操作

SFTP上传下载文件.文件夹常用操作 1.查看上传下载目录lpwd 2.改变上传和下载的目录(例如D盘):lcd  d:/ 3.查看当前路径pwd 4.下载文件(例如我要将服务器上tomcat的日志文件取出来)进入你要下的文件所在的文件夹:cd /usr/apache-tomcat-6.0.39/logs/下载:get catalina.out 5.上传文件(例如我要上传一个文件到usr目录下)进入你想要上传文件的目录cd /usr上传文件put do.sh 6.上传下载文件夹格式:下载文件夹g

SecureCRT上传下载数据的方法

转自http://blog.sina.com.cn/s/blog_4af3b94f0101kfw5.html ———————————————————————————————————————————————————— SecureCRT这款SSH客户端软件同时具备了终端仿真器和文件传输功能.比ftp命令方便多了,而且服务器不用再开FTP服务了.rz,sz是便是Linux/Unix同Windows进行ZModem文件传输的命令行工具. windows端需要支持ZModem的telnet/ssh客户端

以文件流的方式 文件上传 下载

HTML: <div class="box-body">                                    <form id="upload_form" enctype="multipart/form-data"  action="/wjgl/fileSave" method="post">                                     

向云服务器上传下载文件方法汇总(转)

转载于:https://yq.aliyun.com/articles/64700 摘要: 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" 2."本地资源"-->详细信息. 3."磁盘驱动器"前面打钩. 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌

经验分享] 向云服务器上传下载文件方法汇总

一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" <ignore_js_op> 2."本地资源"-->详细信息. <ignore_js_op> 3."磁盘驱动器"前面打钩. <ignore_js_op> 4.连接远程电脑后,打开"我的电脑",就能看到刚刚共享的硬盘驱动器.把

阿里云服务器数据库mysql连不上解决方法

有时启或无缘无故的就会出来数据库连不上的问题. 1.重启服务器 2.出现了mysql未连接上, 3.重新启动mysql,出现502 4.执行/etc/init.d/php-fpm start,出现数据库无法连接 5.执行service mysqld restart,重启数据库 如果 =====nginx错===== 重启nginx后丢失nginx.pid,如何重新启动nginx /alidata/server/nginx/sbin/nginx -c /alidata/server/nginx/c