【发布时间】:2019-05-14 03:13:06
【问题描述】:
我在 umbraco 中使用自定义部分来显示用户发送的消息。我希望管理员能够通过将文件上传到消息本身来回答这些消息。这样我就会知道哪个文件属于哪个消息。我遵循了一些指南和建议,最值得注意的是这个 file-upload-in-backoffice-custom-section 关于如何从 umbraco 后台上传文件。
但是我的代码的问题是它似乎没有发送整个文件和 post 请求,只是文件的路径变得类似于:C:\fakepath\file.pdf
我的问题是如何在 post 请求中发送整个文件,以及如何在 API 函数中捕获/转换文件为 HttpPostedFileBase。如果我可以将文件作为 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);
}
【问题讨论】:
标签: c# angularjs umbraco umbraco7 umbraco8