我是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)如何在上传方法中处理图像?像调整大小,减少文件大小,质量等?
谢谢
答案 0 :(得分:5)
1)我们将文件存储在与app_data不同的位置。我们有几个客户组,我们给他们提供了一个从数据库中获取的唯一文件夹。存储在数据库中也是一种选择,但是如果你走这条路,请确保你保存的文件不直接属于你需要经常检索的表。没有对错,但在this question and answer阅读了一些优点和缺点。
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命名空间。 找到一个链接,其中包含一个可接受的答案,用于表示图片的低估:ASP.Net MVC Image Upload Resizing by downscaling or padding
答案 1 :(得分:1)
这些问题实际上与Web API或REST无关。
以上所有工作都在Asp.Net,MVC,Web API 1和2中,自定义HTTP处理程序,基本上都在任何.Net代码中。
答案 2 :(得分:-2)
@Binke 切勿在路径上进行用户字符串操即fileName.split(&#39;。&#39;)[1]如果文件名是这样的话,将不会返回扩展名:some.file.txt,如果文件没有扩展名,则会失败,索引超出范围错误。 始终使用文件API,即Path.GetExtension。
同样使用扩展程序来获取内容类型并不安全,尤其是涉及图片和视频时,只需考虑avi扩展程序,许多视频格式都会使用。
files.Add(Path.GetFileName(file.LocalFileName))应该是files.Add(fileName)。