Skip to content

提供统一的文件上传下载服务,图片缩放和水印服务

Notifications You must be signed in to change notification settings

MackYang/FileService

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

文件服务

以WebApi的方式提供统一的文件上传下载服务,图片缩放和水印服务(基于.NetFramework4.5,写于2015年)




部署说明

在mysql数据库上运行database.sql,以创建库表结构.


打开FileServer.sln解决方案,分别右击FileInApi项目和FileOutApi项目选择发布,将这两个网站分别发布到您磁盘的不同目录下.
分别修改两个网站的web.config中的数据库链接字符串,以及log4net配置部分的MariaDBAppender的数据库连接字符串(用于记录系统本身的日志).

在IIS(IIS7)以上新建两个网站(而不是添加应用程序),分别指向刚才的两个发布目录,应用程序池选择NetFramework4.0版本.

修改FileInApi的Set.config的Ex部分,设置文件上传的目录和上传文件大小限制,以及文件下载服务的网站地址:

  <Ex>
    <!--上传的文件的保存到这个根目录下-->
    <FileUploadRootPath><![CDATA[D:\_File\]]></FileUploadRootPath>
    <!--上传文件最大大小,M为单位-->
    <FileMaxSize><![CDATA[100]]></FileMaxSize>
    <!--文件下载服务的Api地址-->
    <FileOutServerURL><![CDATA[http://localhost:7901]]></FileOutServerURL>
  </Ex>

修改FileOutApi的Set.config的Ex部分,设置文件所存放的目录和缓存文件目录:
<Ex>
    <File>
      <!--和文件上传服务中所配置的文件根目录一样-->
      <FileUploadRootPath><![CDATA[D:\_File\]]></FileUploadRootPath>
      <!--文件缓存目录,用于存放自动生成的缓存文件-->
      <ImageCacheRootPath>
        <![CDATA[D:\_File\ImageCache\]]>
      </ImageCacheRootPath>
    </File>
  </Ex>

都配置完以后,分别重启两个网站使配置生效.


接口说明

接口名称接口地址参数说明请求方式返回值备注
上传单个文件file\AddFile
参数名参数类型备注
systemIdstring业务系统的ID,每个业务系统一个固定的ID,由接入时分配
filefile要上传的文件,通过form上传
createIdstring可选,用于区分业务系统中是哪个用户上传的文件,如果传了,在删除文件时只有该用户才能删除
POST/Form{     "State":1,     "Data":{         "FileId":"36458056-6288-4c18-88e1-a42ff3416345",         "AccessUrl":"[http://localhost:7901/file/GetFile?systemId=7ea62630-4994-11e7-9c7d-00ff659703f8&fileId=36458056-6288-4c18-88e1-a42ff3416345](http://localhost:7901/file/GetFile?systemId=7ea62630-4994-11e7-9c7d-00ff659703f8&fileId=36458056-6288-4c18-88e1-a42ff3416345)",         "FileName":"libexpat-1.dll"     } }

State为1时代表成功,Data为对象,

Data中的FileId表示该 文件的ID,

Data中的AccessUrl表示该文件的访问地址.

Data中的FileName表示文件名称.

请业务系将FileId或AccessUrl统保存到库中,将来访问该文件时会用到,推荐保存FileId.(将来服务地址变更时只要改访问前缀的配置,不用改数据库存放的内容)

State为其它时,Data为具体失败的原因

上传多个文件file\AddFiles
参数名参数类型备注
systemIdstring业务系统的ID,每个业务系统一个固定的ID,由接入时分配
filesfile要上传的多个文件,通过form上传
createIdstring可选,用于区分业务系统中是哪个用户上传的文件,如果传了,在删除文件时只有该用户才能删除
POST/Form[     {         "State":1,         "Data":{             "FileId":"1b244b9d-7a4f-48fd-b3ad-fb9f33a7bb7f",             "AccessUrl":"[http://localhost:7901/file/GetFile?systemId=7ea62630-4994-11e7-9c7d-00ff659703f8&fileId=1b244b9d-7a4f-48fd-b3ad-fb9f33a7bb7f](http://localhost:7901/file/GetFile?systemId=7ea62630-4994-11e7-9c7d-00ff659703f8&fileId=1b244b9d-7a4f-48fd-b3ad-fb9f33a7bb7f)",             "FileName":"libpng14-14.dll"         }     },     {         "State":1,         "Data":{             "FileId":"9b164dcc-1ca6-41fe-8b45-f64cc731dcc0",             "AccessUrl":"[http://localhost:7901/file/GetFile?systemId=7ea62630-4994-11e7-9c7d-00ff659703f8&fileId=9b164dcc-1ca6-41fe-8b45-f64cc731dcc0](http://localhost:7901/file/GetFile?systemId=7ea62630-4994-11e7-9c7d-00ff659703f8&fileId=9b164dcc-1ca6-41fe-8b45-f64cc731dcc0)",             "FileName":"license.txt"         }     } ]

返回值的解释请参照上传单个文件,

只是分别为每个文件返回了上传结果.

删除文件file\DeleteFile
参数名参数类型备注
systemIdstring业务系统的ID,每个业务系统一个固定的ID,由接入时分配
fileIdstring文件的id
createIdstring可选,用于区分业务系统中是哪个用户上传的文件,如果上传文件时传递了该值,在删除文件时也必须传(只有该用户才能删除)
POST/json{     "State":1,     "Data":null }

State为1时代表成功,Data为null,

State为其它时,Data为具体失败的原因

文件下载服务:

接口名称接口地址参数说明请求方式返回值备注
下载文件file\GetFile
参数名参数值备注
systemIdstring业务系统的ID,每个业务系统一个固定的ID,由接入时分配
fileIdstring文件的id
widthint

可选,用于获取指定宽度的图片,该参数只对图片类型的文件有效

要求与height参数并用

heightint

可选,用于获取指定高度的图片,该参数只对图片类型的文件有效

要求与width参数并用

addWaterint可选 0或1,用于对图片添加水印,为1时添加,该参数只对图片类型的文件有效
waterFontSizeint可选,用于设置图片水印的字号大小,该参数只对图片类型的文件有效
waterTextstring可选,用于设置图片的文印文字,该参数只对图片类型的文件有效
get文件\图片

正常情况下是返回一个图片或文件,

当发生错误时,会返回json表示具体的错误原因

{     "State":0,     "Data":"文件信息不存在" }


使用方式

上传文件

上传前的准备:

1,请先在biz_system表里添加业务系统的信息,id字段就是业务系统的systemId,一般用guid.

2,重启两个网站(目的是刷新缓存中的业务系统信息))或用PostMan调用两个网站FileController中的RefreshSystemList方法,该方法参数的systemId是Set.config中配置的,不是数据库中的.

备注:为节省磁盘空间,同一文件重复上传只会保存一次文件(根据文件的MD5判定是否是相同文件),但会在数据库中分别存放上传的信息(文件的引用信息).


上传文件:

下边是Web方式上传的代码,供参考:

<html>
    <head>
        <meta charset="utf-8">
        <script src="jquery.js"></script>
        <script src="jquery.plugin.migrate1.2.1.js"></script>
 
    </head>
 
    <body>
        <form id="uploadForm">
            <input type="hidden" name="systemid" value="aeed0db2-4994-11e7-9c7d-00ff65970a5e" />
            <input type="file" name="file" />
            <input type="button" value="upload" onclick="doUpload();" />
        </form>
    </body>
    <script type="text/javascript">
        function doUpload() {
 
            var formData = new FormData($("#uploadForm")[0]);
            $.ajax({
                url: 'http://localhost:7100/file/AddFile',
                type: 'POST',
                data: formData,
                contentType: false,
                processData: false,
                success: function(returndata) {
                    alert(returndata);
                },
                error: function(returndata) {
                    alert(returndata);
                }
            });
        }
    </script>
 
</html>

下载文件

文件上传成功后,返回的数据中Data字段里有文件的下载路径,直接访问下载路径即可,对于非图片文件width,height,addWater,waterFontSize,waterText等图片处理的参数不起作用,直接返回原文件,对于图片类型的文件,会根据这些参数按原图比例加工成指定大小的图片.

下边附上PostMan的调用参数与返回值截图:

上传文件:

下载文件:



最后祝大家使用愉快,如果有帮助到您,记得点个星,再见不负遇见!

About

提供统一的文件上传下载服务,图片缩放和水印服务

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published