Asp.net mvc 如何在ASP.NET MVC中使用plupload软件包?
我使用的是1.3.0版 更具体地说,我必须如何定义我的控制器操作来支持分块?我可以使用Asp.net mvc 如何在ASP.NET MVC中使用plupload软件包?,asp.net-mvc,asp.net-mvc-2,plupload,Asp.net Mvc,Asp.net Mvc 2,Plupload,我使用的是1.3.0版 更具体地说,我必须如何定义我的控制器操作来支持分块?我可以使用HttpPosteFileBase作为参数吗 目前,我正在使用以下代码初始化插件 头上的标签 <link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/jquery.ui.plupload.css" )%>" /> <link type="
HttpPosteFileBase
作为参数吗
目前,我正在使用以下代码初始化插件
头上的标签
<link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/jquery.ui.plupload.css" )%>" />
<link type="text/css" rel="Stylesheet" media="screen" href="<%: Url.Content( "~/_assets/css/plupload/gsl.plupload.css" )%>" />
<script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/gears_init.js" )%>"></script>
<script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/plupload.full.min.js" )%>"></script>
<script type="text/javascript" src="<%: Url.Content( "~/_assets/js/plupload/jquery.ui.plupload.min.js" )%>"></script>
文件准备就绪
$("#uploader").pluploadQueue({
runtimes: 'html5,html4,gears,flash,silverlight',
url: '<%: Url.Content( "~/Document/Upload" ) %>',
max_file_size: '5mb',
chunk_size: '1mb',
unique_names: true,
filters: [
{ title: "Documenti e Immagini", extensions: "doc,docx,xls,xlsx,pdf,jpg,png" }
],
multiple_queues: false
});
$(“#上传程序”).pluploadQueue({
运行时:“html5、html4、gears、flash、silverlight”,
url:“”,
最大文件大小:“5mb”,
块大小:“1mb”,
唯一的名称:true,
过滤器:[
{标题:“Documenti e Immagini”,扩展:“doc、docx、xls、xlsx、pdf、jpg、png”}
],
多个队列:false
});
给你:
[HttpPost]
public ActionResult Upload(int? chunk, string name)
{
var fileUpload = Request.Files[0];
var uploadPath = Server.MapPath("~/App_Data");
chunk = chunk ?? 0;
using (var fs = new FileStream(Path.Combine(uploadPath, name), chunk == 0 ? FileMode.Create : FileMode.Append))
{
var buffer = new byte[fileUpload.InputStream.Length];
fileUpload.InputStream.Read(buffer, 0, buffer.Length);
fs.Write(buffer, 0, buffer.Length);
}
return Content("chunk uploaded", "text/plain");
}
对于每个区块和上载的每个文件,将多次调用此方法。它将块大小和文件名作为参数传递。我不确定是否可以使用HttpPostedFileBase
作为操作参数,因为名称不确定。请看这里:
$("#uploader").pluploadQueue({
// General settings
runtimes: 'silverlight',
url: '/Home/Upload',
max_file_size: '10mb',
chunk_size: '1mb',
unique_names: true,
multiple_queues: false,
// Resize images on clientside if we can
resize: { width: 320, height: 240, quality: 90 },
// Specify what files to browse for
filters: [
{ title: "Image files", extensions: "jpg,gif,png" },
{ title: "Zip files", extensions: "zip" }
],
// Silverlight settings
silverlight_xap_url: '../../../Scripts/upload/plupload.silverlight.xap'
});
// Client side form validation
$('form').submit(function (e) {
var uploader = $('#uploader').pluploadQueue();
// Files in queue upload them first
if (uploader.files.length > 0) {
// When all files are uploaded submit form
uploader.bind('StateChanged', function () {
if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) {
$('form')[0].submit();
}
});
uploader.start();
} else {
alert('You must queue at least one file.');
}
return false;
});
在控制器中:
[HttpPost]
public string Upload( ) {
HttpPostedFileBase FileData = Request.Files[0];
if ( FileData.ContentLength > 0 ) {
var fileName = Path.GetFileName( FileData.FileName );
var path = Path.Combine( Server.MapPath( "~/Content" ), fileName );
FileData.SaveAs( path );
}
return "Files was uploaded successfully!";
}
仅此而已…控制器中不需要块…Small bug-第7行应为name notfileName@Colin,谢谢你指出这一点。我已经更新了答案。在我的实现中,我的控制器和操作的Url不会执行。上面的方法是如何工作的,而我将我的方法指向相关的“~/Document/Upload”post操作,它甚至没有执行(断点未命中)。试几天。感到沮丧。2.发表评论。希望如此。3.在发表评论后,立即找出答案。墨菲定律感谢达林
chunk==0?FileMode.Create:FileMode.Append
如果plupload尝试了块0、1、1、2的效果(例如,可能它没有得到块1
的响应并重试),会发生什么情况。假设plupload永远不会这样做(现在或将来),区分Create
和Append
实现了什么Append
is:打开文件(如果存在)并查找到文件的末尾,或者创建一个新文件,只是想知道为什么会用相反的值声明两次“多个队列”?(打字?@Geovani Martinez:只是一个复制和粘贴拒绝:)除非图像大小非常小,否则它不会工作-因为,我猜,只有第一个区块会被保存,如果图像大于此值,它将无法正确保存。控制器中不需要区块
!!怎么用?plupload将针对每个区块将区块发送到action。因此,每个区块都将覆盖上一个区块。我说的对吗?如果文件大于1mb,则需要分块。NET将抛出超出最大请求长度的。
这是不正确的,测试一个比您的Plupload区块大小设置大的文件,您将看到每个区块的控制器方法多次