背景: .net core 中默认已经取消可以直接访问图片,因为这样不安全. 导致我们上传的图片无法直接通过url访问.
解决方案:
一: 通过修改项目配置,使可以直接通过url访问.(方法略,可以百度);
二: 图片都通过接口返回,接口里面读取项目的图片,然后返回流;
1.新建.net core 2.0 项目(过程略)
2.通过nuget添加引用 System.Drawing.Common; .net core 开始的时候并没有System.Drawing,在2.0之后新增了 System.Drawing.Common,用于替代原来的System.Drawing.用法基本一致
3.写接口了
a. 使用特性路由传入想要的尺寸和文件名,这样可以更好的用于前端展示,
b. 没有找到图片或者错误时返回默认的一张图片
c. 需要注意引用 using System.IO;using System.Drawing;
d. .net core 中返回图片不用 HttpResponseMessage 类型,而是直接采用 IActionResult. 而且封装了FileContentResult类,可以直接返回.
e. .net core 中获取当前项目的物理地址可以通过 AppContext.BaseDirectory 和.net 有区别
///访问图片///
/// 所访问图片的宽度,高度自动缩放,大于原图尺寸或者小于等于0返回原图
/// 所要访问图片的名称或者相对地址
/// 图片
[HttpGet]
[Route("file/image/{width}/{name}")]public IActionResult GetImage(int wi
背景: .net core 中默认已经取消可以直接访问图片,因为这样不安全. 导致我们上传的图片无法直接通过url访问.解决方案:一: 通过修改项目配置,使可以直接通过url访问.(方法略,可以百度);二: 图片都通过接口返回,接口里面读取项目的图片,然后返回流;步骤:1.新建.net core 2.0 项目(过程略)2.通过nuget添加引用System.Drawing.Common; .n...
public void ConfigureServices(IServiceCollection services)
if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
var pngquant = Configuration.GetSection("PngquantPathLinux").Value;
PngquantConfig.Configure(new PngquantOptions { BinaryFolder = pngquant });
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) {
var pngquant = Configuration.GetSection("PngquantPathWin").Value;
PngquantConfig.Configure(new PngquantOptions { BinaryFolder = pngquant });
FileStream fs = new FileStream(filePath, FileMode.Open);
byte[] byData = new byte[fs.Length];
//设置
压缩
选项
var options = new PngQuantOptions()
QualityMinMax = (65, 80), //Minimum = 65, Maximum = 80. Default null
Speed = 1, //Value between 1 and 11. default 3.
IEBug = false, //Attempt to fix iebug. default false.
Bit = 256 //bit-rate. default 256
///Invoke the compressor
Compressor pngQuant = new PngQuant(options);
//Compress bytes
byte[] compressed = await pngQuant.Compress(byData);
MemoryStream ms = new MemoryStream(compressed); //把那个byte[] 数组传进去, 然后
using (FileStream fs = new FileStream(savePath, FileMode.Create, FileAccess.Write))
ms.WriteTo(fs);
背景:
.net
core
中默认已经取消可以直接访问
图片
,因为这样不安全. 导致我们上传的
图片
无法直接通过url访问.
解决方案:
一: 通过修改项目配置,使可以直接通过url访问.(方法略,可以百度);
二:
图片
都通过
接口
返回
,
接口
里面读取项目的
图片
,然后
返回
流;
新建
.net
core
2.0 项目(过程略)
通过nuget添加引用 System.Drawing.Common;
.net
core
开始的时候并没有System.Drawing,在2.0之后新增了 System.Dr
你要明白,任何问题都不是孤立存在的,一定有人曾经遇到过,并且已经有更好的解决办法了,只是我还不知道。我不应该在黑暗中独自前行,去重新发明轮子,也许我的顿悟,只是别人的基本功!我应该要站在巨人的肩膀上,学习更成熟的经验和方法,然后再来解决这个问题
01-04
using Microsoft.AspNet
Core
.Mvc;
using PublicHealthUploadFile.PublicMethods;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System
.Net
.Http.Headers;
using System.Threading.Tasks;
namespace UploadFile.Control
在安卓开发中有一个非常常用的功能就是上传
图片
了,但往往
图片
较大,而安卓屏幕较小,不需要过高的分辨率,我们需要
压缩
一下在发送到服务器这样可以减少服务器的存储压力和减少网络的使用。
下面是服务端的代码就是要获取到一个IFormFile对象就行了,这样就能或得到流,然后我们通过流写到服务器所在的机器硬盘里就可以了。文件名我们用随机数生成就可以了。
using System;
using Syste...
在上面的代码中,我们首先使用 `System.IO.File.ReadAllBytes` 方法读取
图片
文件,然后使用 `File` 方法将其作为响应
返回
。第一个参数是
图片
的字节数组,第二个参数是 MIME 类型。在这个例子中,我们使用了 `image/png` 作为 MIME 类型,因为
图片
的扩展名是 `.png`。如果你要
返回
不同类型的
图片
,需要相应地更改 MIME 类型。
注意,`GetImage` 方法的 `[HttpGet("image")]` 属性指定了该方法的 URL 路径为 `/image`,你可以根据自己的需要更改。