我前台把要上传的文件都存在listbox里面,后台取到客户端文件路径,如何上传到服务器呢?
解决方案 »
- InstallShield 12在XML File Changes中导入的config文件的节点元素生成顺序的问题
- 为什么字体的颜色换不了????
- 初学hello word 问题
- C#调用其它应用程序的界面显示问题,大吓们都进来帮帮忙``
- 树视图图象显示
- 时间输入限制问题 限制为yyyy-mm-dd
- Winform 合并word 要求不产生临时文件直接在内存中合并word对象
- 在GridView中导出Excel,一定要加的方法
- [求助]:菜鸟问题。如何从键盘上获取数值?
- 怎样保存一个打开的Excel文件
- 无法将System.Data.SqlClient. SqlParameter 隐式转换为“string”,怎么办啊?
- 十万火急:如何利用AxWebBrowser和mshtml动态生成表格
**//// <summary>
/// WebClient上传文件至服务器
/// </summary>
/// <param name="fileNamePath">文件名,全路径格式</param>
/// <param name="uriString">服务器文件夹路径</param>
private void UpLoadFile(string fileNamePath,string uriString)
{
string fileName = fileNamePath.Substring(fileNamePath.LastIndexOf("\\") + 1);
NewFileName = DateTime.Now.ToString("yyMMddhhmmss") + DateTime.Now.Millisecond.ToString() + fileNamePath.Substring(fileNamePath.LastIndexOf("."));
string fileNameExt = fileName.Substring(fileName.LastIndexOf(".") + 1);
if(uriString.EndsWith("/") == false) uriString = uriString + "/"; uriString = uriString + NewFileName;
/**//// 创建WebClient实例
WebClient myWebClient = new WebClient();
myWebClient.Credentials = CredentialCache.DefaultCredentials; // 要上传的文件
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
//FileStream fs = OpenFile();
BinaryReader r = new BinaryReader(fs);
try
{
//使用UploadFile方法可以用下面的格式
//myWebClient.UploadFile(uriString,"PUT",fileNamePath);
byte[] postArray = r.ReadBytes((int)fs.Length);
Stream postStream = myWebClient.OpenWrite(uriString,"PUT");
if(postStream.CanWrite)
{
postStream.Write(postArray,0,postArray.Length);
}
else
{
AppHelper.MessageService.ShowError("文件目前不可写!");
}
postStream.Close();
}
catch
{
AppHelper.MessageService.ShowError("文件上传失败,请稍候重试~");
}
}循环调用UpLoadFile方法就可以了
for (int 1=0;i < this.ListBox1.Items.Count;i++)
{
UpLoadFile(this.ListBox1.Items(i).Text,url);
}
孟老大的
这种方式,由用户选择后上传
上传动作本身是由浏览器自动完成的,只要提交
服务器端用Request.Files来接收
注意From必须有 enctype="multipart/form-data"属性
浏览器为了安全,只允许你点击文件域的“浏览..”来选择文件或手工输入路径,而不允许你通过代码为文件域赋值。你客户端页面的listbox列表中的c:\a.txt c:\b.txt,是怎么添加进去的?你怎么保证这两个文件存在呢?每个客户端的情况又不一样。楼主如果能把问题再描述清楚些,我想我很乐意帮忙。
先生成一个结构
里面放基本附件的信息,要是流的话(声明为引用类型),在结构中要申明,不确定,那就直接放Object
在上传的时候,将结构加在数组里面(也可以用其他的,但必须是引用类型的),每增加一个,就在向数组里面,增加这个结构,然后,一次性全部提交.
ofile.style.display='none';
//创建新file控件
var f = document.createElement("input");
f.type = 'file';
f.name = 'file'+fileNum;
f.id = 'file'+fileNum;
f.size='20';
f.className = 'in3';
var div1 = document.getElementById("files")
div1.insertBefore(f,div1.firstChild);
,我的表单继承了一个基类的,跟这个是不是有关系
这是我用js在客户端写的一个动态添加删除文件域的效果图,点此处可以运行其代码如下:<script language="javascript">
function add()
{
var myFiles=document.getElementById("myFiles");
var filediv=document.createElement("div");
filediv.innerHTML="<input type=\"file\" />";
myFiles.appendChild(filediv);
var thisFile=filediv.childNodes[0];
thisFile.click();
if(checkRepeat(thisFile.value))
{
myFiles.removeChild(filediv);
return;
}
var mySelect=document.getElementById("mySelect");
var option=new Option(thisFile.value,thisFile.value);
mySelect.options.add(option);
mySelect.options.selectedIndex=mySelect.options.length-1;
mySelect.size++;
}function remove()
{
var mySelect=document.getElementById("mySelect");
var selectedIndex=mySelect.selectedIndex;
if(selectedIndex==-1)
{
alert("请选择要移除的文件!");
return;
}
mySelect.options.remove(selectedIndex);
if(selectedIndex==0)
mySelect.options.selectedIndex=0;
else
mySelect.options.selectedIndex=selectedIndex-1;
mySelect.size--;
var myFiles=document.getElementById("myFiles");
myFiles.removeChild(myFiles.childNodes[selectedIndex]);
}function checkRepeat(filepath)
{
var myOptions=document.getElementById("mySelect").options;
for(i=0;i<myOptions.length;i++)
{
if(myOptions[i].value==filepath)
{
alert("该文件已存在列表当中,请不要重复选择!");
return true;
}
}
return false;
}
</script><form action="" method="post" enctype="multipart/form-data" name="form1">
<br>
<div id="myFiles" style="display:none"></div>
<br>
<table width="200" border="1">
<tr>
<td align="center"><input name="button" type="button" onclick="add();" value="添加文件" />
<input type="button" onClick="remove();" name="buttonDelete" value="移除文件" /></td>
</tr>
<tr>
<td>文件列表:</td>
</tr>
<tr>
<td><select size="0" id="mySelect">
</select></td>
</tr>
<tr>
<td align="center"><input type="submit" name="Submit" value="上传"></td>
</tr>
</table>
</form>...不知道满足你的要求不?
{
//取得上传文件的个数
int FileCount = listbox.items.Count;
string strFilename;
string[] AFilename;
char[] de = {'\\'};
HttpPostedFile hpf; for(int i=0;i<FileCount;i++)
{
hpf = listbox.items[i];
AFilename = hpf.FileName.Split(de);
strFilename = AFilename[AFilename.Length-1];
Response.Write(strFilename);
hpf.SaveAs(Server.MapPath(".")+"\\"+strFilename);//自己写路径
}
}
前台:
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script>
var fileNum=0;
function addinput()
{
//隐藏file控件
var ofile = document.getElementById("file"+fileNum) ;
alert(fileNum);
alert(ofile);
ofile.style.display= 'none';
//创建新file控件
var f = document.createElement("input");
fileNum=fileNum+1;
f.type = 'file';
f.name = 'file'+fileNum;
f.id = 'file'+fileNum;
f.size= '20';
f.className = 'in3'; var div1 = document.getElementById("files")
//div1.insertBefore(f,div1.firstChild);
div1.insertAdjacentElement("BeforeBegin",f);
}
function Button2_onclick() {
}</script>
</head>
<body>
<form id="form1" runat="server" enctype="multipart/form-data">
<table>
<tr class="formtb" style="color: #000000">
<td style="width: 67px">
<asp:ListBox id="ListBox1" runat="server"></asp:ListBox>
<table><tr><td><div id="files">
<input id="file0" type="file" /></div></td></tr></table>
<input id="Button2" type="button" value="button" onclick="return addinput()" />
<td class="formtbesumes_annex" colspan="7">
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="Button" /></td>
</tr>
<tr></tr>
</table> </form>
</body>
</html>
后台:
protected void Button3_Click(object sender, EventArgs e)
{ HttpFileCollection files1 = Request.Files;
HttpFileCollection files = HttpContext.Current.Request.Files;
for (int i = files.Count - 1; i >= 0; i--)
{
HttpPostedFile hpfile = files[i];
}
}
我这边request.files取不到input type=file的,单能取到fileupload的
在这个例子中,附件是保存在服务端.不是保存在数据库.//方法一:<%@ Import Namespace="System.IO" %>
<%@ Page Language="C#" %><script runat="server"> protected void SubmitButton_Click(Object sender, EventArgs e){
string filepath = "C:\\Uploads";
HttpFileCollection uploadedFiles = Request.Files;
for (int i = 0; i < uploadedFiles.Count; i++)
{
HttpPostedFile userPostedFile = uploadedFiles[i];
try
{
if (userPostedFile.ContentLength > 0 )
{
Span1.InnerHtml += "<u>File #" + (i+1) +
"</u><br>";
Span1.InnerHtml += "File Content Type: " +
userPostedFile.ContentType + "<br>";
Span1.InnerHtml += "File Size: " +
userPostedFile.ContentLength + "kb<br>";
Span1.InnerHtml += "File Name: " +
userPostedFile.FileName + "<br>";
userPostedFile.SaveAs(filepath + "\\" +
Path.GetFileName(userPostedFile.FileName));
Span1.InnerHtml += "Location where saved: " +
filepath + "\\" +
Path.GetFileName(userPostedFile.FileName) +
"<p>";
}
}
catch (Exception Ex)
{
Span1.InnerText += "Error: <br>" + Ex.Message;
}
}
}</script><html>
<head>
</head>
<body>
<form enctype="multipart/form-data" runat="server">
<p>
Select File1:<br />
<input id="File1" type="file" runat="Server" />
<br />
Select File2:<br />
<input id="File2" type="file" runat="Server" />
<br />
Select File3:<br />
<input id="File3" type="file" runat="Server" />
<br />
Select File4:<br />
<input id="File4" type="file" runat="Server" />
</p>
<p>
<input id="Submit1" type="submit" value="Upload Files"
runat="Server" onserverclick="SubmitButton_Click" />
<br />
</p>
<span id="Span1" runat="Server"></span>
</form>
</body>
</html>
方法二:
/// <summary>
/// 多附件的上传
/// </summary>
/// <returns>bool</returns>
private bool upMoreFiles(Guid Sn)
{
System.Web.HttpFileCollection files = Request.Files;
if (files.Count < 1)
return false;
try
{
string fileName, fileExt,fileType,filePath,fileSize;
wppContractDB wppdb = new wppContractDB();
for (int i = 0; i < files.Count; i++)
{
System.Web.HttpPostedFile PostedFile = files[i];
fileName = System.IO.Path.GetFileName(PostedFile.FileName);
if (fileName != string.Empty)
{
fileExt = System.IO.Path.GetExtension(fileName);
fileType = PostedFile.ContentType.ToString();
if (PostedFile.ContentLength > 0)
{
float nSize = (float)PostedFile.ContentLength / 1048576;
fileSize = nSize < 1 ? (((int)(nSize * 1024 + 1)).ToString() + " KB") : (nSize.ToString("0.0") + " MB");
}
else
fileSize = string.Empty;
filePath = "\\"+fileName;
Guid fileID = Guid.NewGuid(); wppdb.InsertAdjContract(fileID,Sn, fileName, filePath,fileSize, fileType);
wppFolderOp folderop = new wppFolderOp();
folderop.aSn = Int32.Parse(Session["CType"].ToString());
folderop.LoadFolderInfo();
PostedFile.SaveAs(Server.MapPath("..") +folderop.aPath+ filePath);
}
}
return true;
}
catch (System.Exception error)
{
// strStatus.Text = error.Message;
return false;
}
}
Mark 一下,顺便贴一下我以前学习过的资料.
在这个例子中,附件是保存在服务端.不是保存在数据库.//方法一:<%@ Import Namespace="System.IO" %>
<%@ Page Language="C#" %><script runat="server"> protected void SubmitButton_Click(Object sender, EventArgs e){
string filepath = "C:\\Uploads";
HttpFileCollection uploadedFiles = Request.Files;
for (int i = 0; i < uploadedFiles.Count; i++)
{
HttpPostedFile userPostedFile = uploadedFiles[i];
try
{
if (userPostedFile.ContentLength > 0 )
{
Span1.InnerHtml += "<u>File #" + (i+1) +
"</u><br>";
Span1.InnerHtml += "File Content Type: " +
userPostedFile.ContentType + "<br>";
Span1.InnerHtml += "File Size: " +
userPostedFile.ContentLength + "kb<br>";
Span1.InnerHtml += "File Name: " +
userPostedFile.FileName + "<br>";
userPostedFile.SaveAs(filepath + "\\" +
Path.GetFileName(userPostedFile.FileName));
Span1.InnerHtml += "Location where saved: " +
filepath + "\\" +
Path.GetFileName(userPostedFile.FileName) +
"<p>";
}
}
catch (Exception Ex)
{
Span1.InnerText += "Error: <br>" + Ex.Message;
}
}
}</script><html>
<head>
</head>
<body>
<form enctype="multipart/form-data" runat="server">
<p>
Select File1:<br />
<input id="File1" type="file" runat="Server" />
<br />
Select File2:<br />
<input id="File2" type="file" runat="Server" />
<br />
Select File3:<br />
<input id="File3" type="file" runat="Server" />
<br />
Select File4:<br />
<input id="File4" type="file" runat="Server" />
</p>
<p>
<input id="Submit1" type="submit" value="Upload Files"
runat="Server" onserverclick="SubmitButton_Click" />
<br />
</p>
<span id="Span1" runat="Server"></span>
</form>
</body>
</html>
方法二:
/// <summary>
/// 多附件的上传
/// </summary>
/// <returns>bool</returns>
private bool upMoreFiles(Guid Sn)
{
System.Web.HttpFileCollection files = Request.Files;
if (files.Count < 1)
return false;
try
{
string fileName, fileExt,fileType,filePath,fileSize;
wppContractDB wppdb = new wppContractDB();
for (int i = 0; i < files.Count; i++)
{
System.Web.HttpPostedFile PostedFile = files[i];
fileName = System.IO.Path.GetFileName(PostedFile.FileName);
if (fileName != string.Empty)
{
fileExt = System.IO.Path.GetExtension(fileName);
fileType = PostedFile.ContentType.ToString();
if (PostedFile.ContentLength > 0)
{
float nSize = (float)PostedFile.ContentLength / 1048576;
fileSize = nSize < 1 ? (((int)(nSize * 1024 + 1)).ToString() + " KB") : (nSize.ToString("0.0") + " MB");
}
else
fileSize = string.Empty;
filePath = "\\"+fileName;
Guid fileID = Guid.NewGuid(); wppdb.InsertAdjContract(fileID,Sn, fileName, filePath,fileSize, fileType);
wppFolderOp folderop = new wppFolderOp();
folderop.aSn = Int32.Parse(Session["CType"].ToString());
folderop.LoadFolderInfo();
PostedFile.SaveAs(Server.MapPath("..") +folderop.aPath+ filePath);
}
}
return true;
}
catch (System.Exception error)
{
// strStatus.Text = error.Message;
return false;
}
}
可以通过脚本动态的创建上传控件,我记得以前163,sina的邮箱就是这样子的.
一、asp.net+Flash,可以一次性批量选择上传的文件,显示上传详细进度,界面非常友好。
二、一个一个文件添加(现在用的上传方式基本上都是这种),本人觉得用Discuz论坛那种界面方式不错。
服务器可以用Request.File方式获得,用SaveAs()保存即可。
<td id = "td_fileupload" height="20" align="left" style="font-family: Arabic Transparent">
<button type="button" name="BtnNewAttach" onclick="AddFileUploadControl();"> New... </button>
<asp:Button ID="Button1" runat="server" Text=" Submit " OnClick="Button1_Click" Font-Names="Arabic Transparent" />
</td>
</table> function AddFileUploadControl()
{ var id = "FileUpload" ;
var control = document.getElementById(id);");
if(control == null
{
var form = document.getElementById("form1");
var inp = document.createElement("input")
inp.type = "file";
inp.name = id;;
inp.id = id;
document.all.td_fileupload.appendChild(inp);");
return false;
} protect void Button1_Click(object sender,eventargs e)
{
int count= Request.Files.count ;//为什么始终只有一个啊,我add 了n个啊?
为}