我正在创建一个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能够调用控制器动作(断点被触发)。但是无法将图像上传到文件夹 实际上控制器代码是从另一个项目中复制的,该项目使用角度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请求中采用适当的安排。
答案 0 :(得分:0)
昨天做了几乎相似的任务。以下代码可能会有所帮助:
<强>的JavaScript 强>
try {
long[] pattern = {500, 250, 0 ,100,0, 250, 500};
Notification noti = new Notification.Builder(this)
.setVibrate(pattern)
.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(1, noti);
}catch(Exception vv)
{
Log.i("not vibrating",vv.getLocalizedMessage());
}
Web API
var formData = new FormData();
var file = $('#fileUploader').prop('files');
formData.append("fileUploader", $("#fileUploader")[0].files[0]);
formData.append("DocumentID", $("#hdnDoc").val());
$.ajax({
type: "POST",
url: 'URL',
data: formData,
dataType: 'json',
contentType: false,
processData: false,
success: function (response) {
})
})