Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Umbraco使用SetValue添加base64文件_C#_File Upload_Umbraco - Fatal编程技术网

C# Umbraco使用SetValue添加base64文件

C# Umbraco使用SetValue添加base64文件,c#,file-upload,umbraco,C#,File Upload,Umbraco,我会马上解释这个问题,但首先……这是可以实现的吗 我在Umbraco中有一个文档类型,用于存储表单中的数据。我可以存储除文件以外的所有内容 ... content.SetValue("notes", item.Notes); content.SetValue("curriculum", item.Curriculum); /*this is the file*/ ... 我正在添加这样的项,其中SetValue来自以下名称空间名称

我会马上解释这个问题,但首先……这是可以实现的吗

我在Umbraco中有一个文档类型,用于存储表单中的数据。我可以存储除文件以外的所有内容

        ...
        content.SetValue("notes", item.Notes);
        content.SetValue("curriculum", item.Curriculum); /*this is the file*/
        ...
我正在添加这样的项,其中SetValue来自以下名称空间名称空间Umbraco.Core.Models,这是函数签名void SetValue(string propertyTypeAlias,object value)

返回错误如下

        byte[] tempByte = Convert.FromBase64String(item.Curriculum);
        var mediaFile = _mediaService.CreateMedia(item.cvExtension, -1, Constants.Conventions.MediaTypes.File);
        Stream fileStream = new MemoryStream(tempByte);
        var fileName = Path.GetFileNameWithoutExtension(item.cvExtension);
        mediaFile.SetValue("umbracoFile", fileName, fileStream);
        _mediaService.Save(mediaFile);
“字符串或二进制数据将被截断。 ↵声明已被终止。”

我弄错什么了吗?我是不是应该送base64?我正在将图像添加到一个媒体文件中,它将在其中创建一个带有序列号的子文件夹。如果我尝试添加一个现有文件夹,它会很好地追加文件,但如果我指向一个新的媒体子文件夹,它也会返回一个错误。我该如何处理这个问题

提前谢谢

编辑1:Cryothic之后回答我已经用以下内容更新了我的代码

        byte[] tempByte = Convert.FromBase64String(item.Curriculum);
        var mediaFile = _mediaService.CreateMedia(item.cvExtension, -1, Constants.Conventions.MediaTypes.File);
        Stream fileStream = new MemoryStream(tempByte);
        var fileName = Path.GetFileNameWithoutExtension(item.cvExtension);
        mediaFile.SetValue("umbracoFile", fileName, fileStream);
        _mediaService.Save(mediaFile);
错误发生在mediaFile.SetValue(…)上

如果我从umbraco上传一个文件,它将转到“”,下一个文件将转到“”。我在哪里告知我的请求,它必须添加到/media文件夹和增量?我是否只指向媒体文件夹,而umbaco处理增量部分

如果我将SetValue更改为以下mediaFile.SetValue(“课程”,文件名,文件流)请求成功,但文件未添加到内容本身,文件被添加到“”而不是“”

如果我尝试以下操作-content.SetValue(“课程”,item.cvExtension)-文件已添加到内容中,但路径为“”


我不太了解umbraco如何将文件插入媒体文件夹(在umbraco外部),以及如何将媒体服务路径添加到内容服务。

是否需要保存base64? 我做过类似的事情,但是使用MediaService

我的项目可以选择在多个向导步骤上上载多个图像,我需要一次保存所有图像。因此,我每一步都循环浏览上传的文件(HttpFileCollection)。acceptedFiletypes是一个字符串列表,其中包含我允许的mimetypes

for (int i = 0; i < files.Count; i++) {
    byte[] fileData = null;
    UploadedFile uf = null;
    try {
        if (acceptedFiletypes.Contains(files[i].ContentType)) {
            using (var binaryReader = new BinaryReader(files[i].InputStream)) {
                fileData = binaryReader.ReadBytes(files[i].ContentLength);
            }
            if (fileData.Length > 0) {
                uf = new UploadedFile {
                    FileName = files[i].FileName,
                    FileType = fileType,
                    FileData = fileData
                };
            }
        }
    }
    catch { }
    if (uf != null) {
        projectData.UploadedFiles.Add(uf);
    }
}
我还检查了一下上传的文件名是否以“.pdf”结尾。在这种情况下,我会将mediaTypeAlias更改为“File”


我希望这会有所帮助。

无需另存为bas64,但我将文件保存为base64字符串。我只需要保存一个文件,所以不需要遍历所有文件。我的目标是保存简历,这意味着我需要保存pdf或docx(或其他word格式)。我应该为所有这些使用mediaTypeAlias“文件”吗?在本周内,我将尝试此实现,并向您反馈我的进度。感谢您的帮助docx或pdf应另存为mediaTypeAlias“文件”是。祝你好运。所以我已经测试了你的方法,即使事情变得更有意义,我还是犯了一个错误。我将用其他信息更新我的问题。我还没有在Umbraco中保存任何base64图像,所以我不知道这是否是原因。我只需发送到控制器并读取Request.Files数组。你是否在使用虚拟文件夹对你的站点进行任何更改?Cryothic在你的帮助下使其正常工作!原来我不需要url,url是自动生成的。问题是我正在创建项目,但没有将其附加到我以前创建的项目。我需要3个参数。如果我没有弄错媒体类型、媒体名称和媒体本身的话。再次感谢您的帮助:)