Как загрузить файл из бэк-офиса umbraco в раздел СМИ? - PullRequest
0 голосов
/ 13 декабря 2018

Я использую пользовательский раздел в umbraco для отображения сообщений, отправленных пользователями.Я хочу, чтобы администраторы могли отвечать на эти сообщения, загружая файл в само сообщение.Таким образом, я буду знать, какой файл принадлежит какому сообщению.Я следовал некоторым руководствам и рекомендациям, в частности этому file-upload-in-backoffice-custom-section о том, как загружать файлы из umbraco backoffice.

Однако проблема с моим кодом заключается в том, чтопохоже, что он не отправляет весь файл с запросом на публикацию, а просто путь к файлу, который становится примерно таким: C: \ fakepath \ file.pdf

Мой вопрос был бы, как мне отправить весь файлв запросе пост и как я могу поймать / преобразовать файл в HttpPostedFileBase внутри функции API.Если я смогу получить файл как HttpPostedFileBase, я буду знать, как загрузить его в медиа-раздел umbraco.

Код ниже:

edit.html:

                    <umb-control-group label="File" description="File to upload">
                        <input type="file" class="umb-editor umb-textstring" ng-model="files" ng-change="fileSelected(files)" ng-multiple="false" />
                    </umb-control-group>
                </div>
            </div>
        </div>
    </umb-editor-container>

    <umb-editor-footer>
        <umb-editor-footer-content-right>
            <div class="umb-button ng-scope">           
                <button ng-click="OnSave()" class="btn umb-button__button btn-success umb-button--">
                    <span class="umb-button__content">
                        Save
                    </span>
                </button>
            </div>
        </umb-editor-footer-content-right>
    </umb-editor-footer>

edit.controller.js:

$scope.fileSelected = function (files) {
        $scope.file = files;
    };


    $scope.OnSave = function () {
            var request = {
                file: $scope.file
            };
            return $http({
                method: 'POST',
                url: "backoffice/Messages/MessagesApi/PostSaveFile",
                headers: { 'Content-Type': undefined },
                transformRequest: function (data) {
                    var formData = new FormData();
                    formData.append("file", data.file);
                    return formData;
                },
                data: request
            }).then(function (response) {
                if (response) {
                    var fileName = response.data;
                    return fileName;
                } else {
                    return false;
                }
            });

    };

MessagesApiController.cs:

public HttpResponseMessage PostSaveFile(HttpPostedFileBase file)
{
    var files = HttpContext.Current.Request;

    if (files != null && files.ContentLength > 0)
    {
        StreamReader reader = new StreamReader(files.InputStream);
        string responseFromServer = reader.ReadToEnd();
    }
    return Request.CreateResponse(HttpStatusCode.OK);
}

1 Ответ

0 голосов
/ 20 декабря 2018

Если кто-то сталкивается с этой проблемой, вот как мне удалось ее решить:

edit.html:

<umb-control-group label="Response File" description="File to upload">
      <input type="file" id="myFile" ng-multiple="false" />
</umb-control-group>

edit.controller.js:

 if ($element.find('#myFile')[0].files[0] !== undefined) {
                var fd = new FormData();
                fd.append('file', $element.find('#myFile')[0].files[0]);
                $http.post("backoffice/Messages/MessagesApi/PostSaveFile", fd, {
                    transformRequest: angular.identity,
                    headers: { 'Content-Type': undefined }
                }).success(function (response) {
                    console.log(response);
                });
            }

MessagesApiController.cs:

public string PostSaveFile()
{
    var file = HttpContext.Current.Request.Files["file"];
    return file.FileName;
}

Файл переменной теперь является HttpPostedFile, и вы можете использовать его по своему желанию, сохраняя в разделе мультимедиа.

...