【发布时间】:2016-07-22 13:58:21
【问题描述】:
我正在创建一个 web api 项目。我已成功完成基于令牌的身份验证。但我正在努力将图像上传到网络 api。
我有以下看法
<form data-bind="submit: uploadApi">
<div>
<label for="caption">Image Caption</label>
<input name="caption" type="text" />
</div>
<div>
<label for="image1">Image File</label>
<input name="image1" type="file" />
</div>
<div>
<input type="submit" value="Submit" />
</div>
</form>
我使用的javascript代码如下
self.uploadApi = function () {
self.result('');
var token = sessionStorage.getItem(tokenKey);
var headers = {};
if (token) {
headers.Authorization = 'Bearer ' + token;
}
var data = new FormData();
var file = self.imgPath();
data.append('file', file);
$.ajax({
type: 'POST',
url: '/api/Upload',
processData: false,
contentType: false,
headers: headers,
data:data
}).done(function (data) {
alert("hai");
self.result(data.FileName);
}).fail(showError);
}
我的控制器代码如下
[Route("api/Upload")]
[HttpPost]
[MimeMultipart]
public async Task<FileUploadResult> Post()
{
var uploadPath = HttpContext.Current.Server.MapPath("~/Uploads");
var multipartFormDataStreamProvider = new UploadMultipartFormProvider(uploadPath);
// Read the MIME multipart asynchronously
await Request.Content.ReadAsMultipartAsync(multipartFormDataStreamProvider);
string _localFileName = multipartFormDataStreamProvider
.FileData.Select(multiPartData => multiPartData.LocalFileName).FirstOrDefault();
// Create response
return new FileUploadResult
{
LocalFilePath = _localFileName,
FileName = Path.GetFileName(_localFileName),
FileLength = new FileInfo(_localFileName).Length
};
}
javascript 能够调用控制器操作(触发断点)。但无法将图像上传到文件夹 实际上,控制器代码是从另一个使用 angular js.in angular js 的项目中复制的,我使用以下代码来调用控制器操作
$scope.startUploading = function ($files) {
//$files: an array of files selected
for (var i = 0; i < $files.length; i++) {
var $file = $files[i];
alert($file);
(function (index) {
$scope.upload[index] = $upload.upload({
url: "./api/fileupload", // webapi url
method: "POST",
file: $file
}).progress(function (evt) {
}).success(function (data, status, headers, config) {
// file is uploaded successfully
$scope.UploadedFiles.push({ FileName: data.FileName, FilePath: data.LocalFilePath, FileLength : data.FileLength });
}).error(function (data, status, headers, config) {
console.log(data);
});
})(i);
}
}
任何人都可以在 ajax 请求中提出正确的安排吗?
【问题讨论】:
-
那么,你在服务器端有什么例外吗?还是不叫警报?发生了什么?
-
没有异常。但是文件没有上传到文件夹
标签: javascript ajax asp.net-web-api