summernote 上传图片到 s3 (asp.net)

Posted

技术标签:

【中文标题】summernote 上传图片到 s3 (asp.net)【英文标题】:summernote upload images to s3 (asp.net) 【发布时间】:2014-07-27 15:56:35 【问题描述】:

在过去的两周里,我一直在为试图弄清楚这一点而摸不着头脑。

Summernote (https://github.com/HackerWins/summernote) 是我首选的编辑器,但我需要将图像上传到 S3 而不是保存为 base64,因为这对于数据库等来说太大了。在 Summernote github 页面上我有找到了这个 (https://github.com/HackerWins/summernote/issues/72),但没有 .net 代码示例。

我可以从我的 asp 网站将文件上传到 S3,我的问题是我应该如何将文件“发送”到我的 webmethod,是的,我正在使用 webmethod,因为 Summernote 代码在某种程度上是在 js 中处理的那asp会明白吗?

我已尝试发送“文件”,并在我的服务器端将其作为对象接收,但这只会导致接收到“[对象文件]”字符串。

我正在用 VB 编码,但 C# 代码也将受到赞赏!

提前致谢。

【问题讨论】:

【参考方案1】:

我不懂VB,所以希望这段C#代码对你有所帮助。

首先,我从未使用过 amazon-s3,因此我不会提供具体示例,但是在进行快速搜索时,我发现了另一个线程,其中用户指出了如何将图像实际上传到amazon 使用内存流here。

一个选项是创建一个上传操作服务器端,这是使用 MVC 在 C# 中的 sn-p:

    [HttpPost]
    public ActionResult UploadImage(HttpPostedFileBase file)
    
        // TODO: your validation goes here, 
        // eg: file != null && file.ContentType.StartsWith("image/") etc...

        var imageUrl = _myAmazonWrapper.UploadImage(file.InputStream);

        return Json(imageUrl);
    

此操作结果将收到一个 HttpPostedFileBase 图像,其中包含具有内容类型、文件名等的实际图像。

最后剩下的就是summernote脚本的实际初始化了:

    $('#summernote').summernote(
        onImageUpload: uploadImages
    );

其中函数uploadImages可以定义如下:

var uploadImages = function (files, editor, $editable) 

    var formData = new FormData();
    formData.append("file", files[0]);

    $.ajax(
        url: "Image/UploadImage",
        data: formData,
        type: 'POST',
        cache: false,
        contentType: false,
        processData: false,
        success: function (imageUrl) 

            if (!imageUrl) 

                // handle error

                return;
            

            editor.insertImage($editable, imageUrl);
        ,
        error: function () 

            // handle error
        
    );
;

请注意,uploadImage 函数不支持多张图片,例如,您可以将图片拖放到 summernote 小部件,在这种特殊情况下,“files”参数将包含多张图片,因此只需枚举它们并上传随意。

祝你好运!

【讨论】:

【参考方案2】:

我最近不得不在 .NET Core 中这样做。

这里是上传图片到s3的动作代码(需要安装AWSSDK.S3):

[HttpPost]
public async Task<IActionResult> UploadFile(IFormFile file)

    try
    
        if (file != null && file.Length > 0)
        
            var relativePath = string.Empty;

            using (var client = new AmazonS3Client("awsAccessKeyId", "awsSecretAccessKey", RegionEndpoint.USEast1))
            
                using (var newMemoryStream = new MemoryStream())
                
                    file.CopyTo(newMemoryStream);

                    var uploadRequest = new TransferUtilityUploadRequest
                    
                        InputStream = newMemoryStream,
                        Key = file.FileName,
                        BucketName = "bucketName",
                        CannedACL = S3CannedACL.PublicRead
                    ;

                    var fileTransferUtility = new TransferUtility(client);
                    await fileTransferUtility.UploadAsync(uploadRequest);

                    relativePath = "urlS3" + "bucketName" + "/" + file.FileName;
                
            

            return Ok(new  FileUrl = relativePath );
        

        return BadRequest("Select a file");
    
    catch (Exception exception)
    
        return BadRequest(exception.Message);
    

下面是代码放在你的视图中,覆盖summernote的上传方法:

$('.html-editor').summernote(
    callbacks: 
        onImageUpload: function (files) 
            for (let i = 0; i < files.length; i++) 
                uploadImageToS3ForSummerNote(files[i]);
            
        
    
);

function uploadImageToS3ForSummerNote(file) 
    var url = '@Url.Action("UploadFile", "MyController")';

    formData = new FormData();
    formData.append("file", file);
    $.ajax(
        type: 'POST',
        url: url,
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
        success: function (data) 
            $('.html-editor').summernote('insertImage', data.fileUrl);
        ,
        error: function (data) 
            alert(data.responseText);
        
    );

【讨论】:

以上是关于summernote 上传图片到 s3 (asp.net)的主要内容,如果未能解决你的问题,请参考以下文章

Summernote 上传文件到服务器

将上传的图片插入summernote编辑器

在summernote上传的图片之间插入br标签

Summernote 图片上传不工作(PHP)

summernote 图片上传和替代不起作用

summernote 上传图片到图片服务器的解决方案(springboot 成功)