【问题标题】:Uploading files to Cloudinary using ASP.NET Core使用 ASP.NET Core 将文件上传到 Cloudinary
【发布时间】:2017-08-03 15:12:40
【问题描述】:

我正在尝试将文件(准确地说是图像)上传到 Cloudinary。 在 Cloudinary 的 .NET 文档 (Documentation) 中,据说文件应该像这样上传:

var uploadParams = new ImageUploadParams()
{
    File = new FileDescription(@"c:\sample.jpg")
};
var uploadResult = cloudinary.Upload(uploadParams);

所以基本上,我需要文件路径来上传图片。当我对路径进行硬编码时,它可以工作,但显然我希望用户能够选择自己的文件。 获取我找到的文件的唯一方法是使用 IFormFile,但我可以使用它上传文件的唯一方法是先将其上传到服务器,然后获取上传文件的路径并将其转发给 Cloudinary,但是那里一定是更好的方法。

那么如何让用户使用 ASP.NET Core 将文件上传到 Cloudinary?

【问题讨论】:

  • 参见 ASP.NET Core 文档中的 File Uploads 部分
  • 参考本教程techcerberus.blogspot.com.ng/2017/10/…public ImageUploadResult UploadImage(HttpPostedFileBase file) { if (file != null) { var uploadParams = new ImageUploadParams { File = new FileDescription(file.FileName, file.InputStream), Transformation = new Transformation().Width(200).Height(200).Crop("thumb").Gravity("face") }; var uploadResult = _cloudinary.Upload(uploadParams); return uploadResult; } return null; }

标签: c# file-upload asp.net-core cloudinary iformfile


【解决方案1】:

基本上,Cloudinary 允许您从 Paths 或 Streams 上传文件。

对于文件路径:

var uploadParams = new ImageUploadParams()
        {
            File = new FileDescription(@"c:\sample.jpg")
        };
        var uploadResult = cloudinary.Upload(uploadParams);

对于流:

HttpPostedFile file = fileInput.PostedFile;
var uploadParams = new ImageUploadParams()
{
    File = new FileDescription(file.FileName, file.InputStream),
};
var uploadResult = cloudinary.Upload(uploadParams);

第二种方法甚至允许您发布 byte[] 图像内容或包含图像数据的 Base64 字符串,您可以轻松地将其转换为 Stream 进行上传。

//data is a byte[]
    Stream stream = new MemoryStream(data);
            var cloudinary = Connect();
            var uploadParams = new ImageUploadParams()
            {
                File = new FileDescription(GetGuid.Short(), stream),
                PublicId = GetGuid.Short()
            };
            var uploadResult = cloudinary.Upload(uploadParams);
            return uploadResult.SecureUri.AbsoluteUri;

【讨论】:

  • 我在这里遇到了一个非常相似的问题。在我的情况下,我从 InputFile Blazor 组件获取我的文件,每当我尝试使用上传方法时,我都会收到 System.Threading.CancellationToken 异常
  • @Tito,您是否将取消令牌传递给该方法?
【解决方案2】:

您不必将图像上传到服务器。

您不能将它们直接从客户端发送到 cloudinary。

查看他们的documentation 如何使用 Jquery 实现这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 2017-10-14
    • 2021-07-07
    • 2013-10-26
    • 2021-05-31
    • 2021-02-01
    • 1970-01-01
    • 2020-03-07
    相关资源
    最近更新 更多