我已经多次使用过这个jQuery插件。
我将上传按钮放在了一个jQuery UI模态对话框中,该对话框使用了PopupImageUploader元素。
<div id="PopupImageUploader" title="Upload Image">
<div id="uploaderFile"></div>
</div>
我的 JavaScript 会在元素 upladerFile 上构建上传器。
function CreateImageUploader() {
var uploader = new qq.FileUploader({
element: $('#uploaderFile')[0],
template: '<div class="qq-uploader">' +
'<div class="qq-upload-drop-area"><span>Drop files here to upload</span></div>' +
'<div class="qq-upload-button ui-button ui-widget ui-corner-all ui-button-text-only ui-state-default">Seleziona il Listino Excel</div>' +
'<ul class="qq-upload-list"></ul>' +
'</div>',
hoverClass: 'ui-state-hover',
focusClass: 'ui-state-focus',
action: 'Home/UploadImage',
allowedExtensions: ['jpg', 'gif'],
params: { },
onSubmit: function(file, ext) {
},
onComplete: function(id, fileName, responseJSON) {
$("#PopupImageUploader").dialog('close');
}
}
});
}
您可以使用
onComplete 事件来检查上传的结果,并最终更新您的下拉菜单。
您的
UploadImage 操作可以接收在
params: { }
属性中指定的额外参数。
这是我的控制器:
[HttpPost()]
public System.String UploadImage(string id)
{
bool IsIE = false;
string sFileName = "";
var TempFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "_TEMP");
if ((Request.Files == null) || (Request.Files.Count == 0))
{
if (string.IsNullOrEmpty(Request.Params["qqfile"]))
{
return ("{success:false, error:'request file is empty'}");
}
else
{
sFileName = Request.Params["qqfile"].ToString();
}
}
else
{
sFileName = Request.Files[0].FileName;
IsIE = true;
}
if (string.IsNullOrEmpty(sFileName))
{
return ("{success:false, error:'request file is empty'}");
}
string DocumentName = id + Path.GetExtension(sFileName);
if (IsIE)
{
try
{
Request.Files[0].SaveAs(Path.Combine(TempFolder, DocumentName));
}
catch (Exception ex)
{
return ("{success:false, error:'" + ex.Message + "'}");
}
}
else
{
try
{
if ((Request.InputStream != null) && (Request.InputStream.CanRead) && (Request.InputStream.Length > 0))
{
using (FileStream fileStream = new FileStream(Path.Combine(TempFolder, DocumentName), FileMode.Create))
{
byte[] FileBytes = new byte[Convert.ToInt32(Request.InputStream.Length) + 1];
Int32 bytesRead = 0;
bytesRead = Request.InputStream.Read(FileBytes, 0, FileBytes.Length);
fileStream.Write(FileBytes, 0, bytesRead);
fileStream.Flush();
fileStream.Close();
}
}
}
catch (Exception ex)
{
return ("{success:false, error:'" + ex.Message + "'}");
}
}
var newFileName = "new assigned filename";
return ("{success:true, newfilename: '" + newFileName + "'}");
}
由于IE的行为不同,因此我有两个不同的过程来读取文件。