我是网络开发的新手,在将文件保存到数据库时遇到了问题。我正在使用 MVC 4、knockoutjs 2.3.0、jquery 2.03 和 amplifyjs 1.1.0。
这是我希望它完成的方式。
在我的上传页面中,我有一个表单:
<form id="uploadForm" name="uploadForm" action="~/Administration/UploadReports" method="post" enctype="multipart/form-data">
<input required type="file" name="fileToUpload" id="fileToUpload" accept="html, image/jpeg">
<input type="submit" data-bind="click:submit" value="Ladda upp fil" />
<input type="reset" value="Avbryt" />
</form>
然后在我的 knockoutViewModel 中有以下代码:
this.submit = function (model, element) {
var test = $('#uploadForm')[0];
var formData = new FormData(test);
amplify.request({
resourceId: "uploadReport",
success: () => {
console.log("success");
},
error: () => {
console.log("error");
},
data: formData
});
};
到目前为止一切正常。当我按下表单中的按钮时,我就到了这里。但我认为 amplifyjs 正在用我的数据表单做一些事情...... Amplify.request 定义如下:
amplify.request.define('uploadReport', 'AJAX', {
url: '/Administration/UploadReports',
type: 'POST',
contentType: false,
processData: false,
cache: false
});
在我的 Controller 中它看起来像这样:
[HttpPost]
public ActionResult UploadReports(HttpPostedFileBase fileToUpload)
{
//Update the list of files
var model = new AdministrationViewModel();
byte[] result;
using (var streamReader = new MemoryStream())
{
fileToUpload.InputStream.CopyTo(streamReader);
result = streamReader.ToArray();
}
model.BetFiles = FileInserter.InsertFile(fileToUpload.FileName, fileToUpload.ContentType, fileToUpload.ContentLength, result).Value;
return View("Reports", model);
}
谁能帮我看看是什么问题?
问候,大卫
这是我得到的:
这是我期望得到的:
最佳答案
目前amplify.js 1.1.2版本不支持FormData
检查这个问题 https://github.com/appendto/amplify/issues/107
可能的解决方案是修改这个事件订阅中的库
amplify.subscribe( "request.ajax.preprocess", function(defnSettings, settings, ajaxSettings) {
var mappedKeys = [],
data = ajaxSettings.data;
if (typeof data === "string" || Object.prototype.toString.call(data) === "[object FormData]") {
return;
}
......(omited)
)}
如果是原生 FormData 对象,那么 amplify 将忽略传递的对象。请求定义中的设置必须包含以避免 jQuery 再次干扰您的 FormData 对象
contentType: false
cache: false
processData: false
关于jquery - Amplifyjs 发布表单数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22509583/