Web Api 2 RESTFUL图像上传

我是Web Api中的新成员,我正在开发我的第一个项目。 我正在为我们公司开发移动CRM系统。

我想存储公司标志,客户脸部照片等。

我在这个主题上找到了一些教程,但不幸的是其中有些教程是旧的(不使用异步),其他教程不起作用。

最后,我发现这一个:http://www.intstrings.com/ramivemula/articles/file-upload-using-multipartformdatastreamprovider-in-asp-net-webapi/它工作正常,但我不明白一些的东西。

1)我应该使用App_Data(或任何其他文件夹,如/ Uploads)来存储这些图像,或者将图像存储在数据库中?

2)我可以只设置支持的图像,如.jpg,.png并拒绝任何其他文件吗?

3)如何在上传方法中处理图像? 像调整大小,减少文件的大小,质量等?

谢谢


没有一个问题实际上与Web API或REST相关。

  • 如果您使用的是SQL Server 2008或更高版本,则答案是使用FILESTREAM列。 这看起来像数据库中的所有优点(即备份,复制,事务),但数据实际上存储在文件系统中。 所以你可以得到每个世界的最好的结果,也就是说不会有人不小心删除文件,所以数据库会引用一个不存在的文件,反之亦然,数据库中的记录被删除,但文件不是,所以你最终会得到一堆孤儿文件。 使用数据库有很多优点,即元数据可以与文件关联,并且权限设置更容易。
  • 这取决于如何上传文件。 也就是说,如果使用多部分形式,然后在部分保存之前检查每个部分的内容类型。 你甚至可以创建你自己的MultipartStreamProvider类。 作为一个API,上传方法可能有一个流或字节数组参数和一个内容类型参数,在这种情况下,只是在内容保存之前测试内容类型参数的值。 对于其他上传方法,根据输入内容进行类似的操作。
  • 您可以使用.Net的内建类(即Bitmap:SetResolution,RotateFlip,调整大小使用接受大小的构造函数),或者如果您不熟悉图像处理,而选择图像处理库。
  • 所有上述工作都在Asp.Net,MVC,Web API 1和2,自定义HTTP处理程序中,基本上在任何.Net代码中。


    1)我们将文件存储在与app_data不同的位置。 我们有几个客户组,我们给他们提供了我们从数据库中获得的唯一文件夹。 在数据库中存储也是一种选择,但是如果沿着这条路走下去,请确保您保存的文件不直接属于需要经常检索的表。 没有对错之分,但在这个问题和解答中有一些利弊。

    2)如果你喜欢那个指南,你可以在循环里面检查一下文件的结尾

    List<string> denyList = new List<string>();
    denyList.Add(".jpg");
    
    foreach (MultipartFileData file in provider.FileData) 
    {
        string fileName = Path.GetFileName(file.LocalFileName);
        if(denyList.Contains(Path.GetExtension(fileName))
             throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    
        files.Add(Path.GetFileName(file.LocalFileName)); 
    }
    

    3)调整图像大小,我从来没有亲自完成我的自我,但我认为你应该看看System.Drawing.Graphics命名空间。 找到一个链接与图片downresize接受的答案:ASP.Net MVC图像上传通过缩小或填充调整大小


    @Binke从不在路径上进行用户字符串操作。 ie fileName.split('。')[1]不会返回扩展名,如果文件名是这样的:some.file.txt,并且如果文件没有扩展名,将会失败并且索引超出范围错误。 始终使用文件API,即Path.GetExtension。

    使用扩展名来获取内容类型并不安全,特别是当涉及图片和视频时,只需考虑许多视频格式使用的avi扩展。

    files.Add(Path.GetFileName(file.LocalFileName))应该是files.Add(fileName)。

    链接地址: http://www.djcxy.com/p/77039.html

    上一篇: Web Api 2 RESTFUL Image Upload

    下一篇: Website Icon Not Showing Up in Google Chrome