当前位置:首页 » 文件管理 » cfileupload文件上传

cfileupload文件上传

发布时间: 2023-06-14 01:16:06

㈠ C#使用HTML文件中的file文件上传,用C#代码接收上传文件

<formid="form1"method="post"enctype="multipart/form-data"action="test.aspx">
<inputid="File1"type="file"name="File1"/>
<inputid="Submit1"type="submit"value="submit"/>
</form>

c# 代码 test.aspx.cs后台代码如下:

usingSystem;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;


publicpartialclasstest:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(Request.Files.Count>0)
{
HttpPostedFilef=Request.Files[0];
f.SaveAs(Server.MapPath("test.dat"));
}
}
}

㈡ 如何上传多个文件

含义 ENCTYPE="multipart/form-data" 说明:
通过 http 协议上传文件 rfc1867协议概述,jsp 应用举例,客户端发送内容构造

1、概述在最初的 http 协议中,没有上传文件方面的功能。 rfc1867 (http://www.ietf.org/rfc/rfc1867.txt) 为 http 协议添加了这个功能。客户端的浏览器,如 Microsoft IE, Mozila, Opera 等,按照此规范将用户指定的文件发送到服务器。服务器端的网页程序,如 php, asp, jsp 等,可以按照此规范,解析出用户发送来的文件。Microsoft IE, Mozila, Opera 已经支持此协议,在网页中使用一个特殊的 form 就可以发送文件。绝大部分 http server ,包括 tomcat ,已经支持此协议,可接受发送来的文件。各种网页程序,如 php, asp, jsp 中,对于上传文件已经做了很好的封装。

2、上传文件的实例:用 servelet 实现(http server 为 tomcat 4.1.24)1. 在一个 html 网页中,写一个如下的form :

load multi files :

text field :

用户可以选择多个文件,填写表单其它项,点击“提交”按钮后就开始上传给 http://192.168.29.65/upload_file/UploadFile

这是一个 servelet 程序注意 enctype="multipart/form-data", method=post, type="file" 。根据 rfc1867, 这三个属性是必须的。multipart/form-data 是新增的编码类型,以提高二进制文件的传输效率。具体的解释请参阅 rfc18672. 服务端 servelet 的编写现在第三方的 http upload file 工具库很多。Jarkata 项目本身就提供了fileupload 包http://jakarta.apache.org/commons/fileupload/ 。

文件上传、表单项处理、效率问题基本上都考虑到了。在 Struts 中就使用了这个包,不过是用 Struts 的方式另行封装了一次。这里我们直接使用 fileupload 包。至于Struts 中的用法,请参阅 Struts 相关文档。这个处理文件上传的 servelet 主要代码如下:

public void doPost( HttpServletRequest request, HttpServletResponse response )
{
DiskFileUpload diskFileUpload = new DiskFileUpload(); // 允许文件最大长度
diskFileUpload.setSizeMax( 100*1024*1024 ); // 设置内存缓冲大小
diskFileUpload.setSizeThreshold( 4096 ); // 设置临时目录
diskFileUpload.setRepositoryPath( "c:/tmp" );
List fileItems = diskFileUpload.parseRequest( request );
Iterator iter = fileItems.iterator(); for( ; iter.hasNext(); )
{
FileItem fileItem = (FileItem) iter.next();
if( fileItem.isFormField() ) { // 当前是一个表单项
out.println( "form field : " + fileItem.getFieldName() + ", " + fileItem.getString() );
} else {
// 当前是一个上传的文件
String fileName = fileItem.getName();
fileItem.write( new File("c:/uploads/"+fileName) );
}

}}

为简略起见,异常处理,文件重命名等细节没有写出。3、 客户端发送内容构造假设接受文件的网页程序位于 http://192.168.29.65/upload_file/UploadFile.假设我们要发送一个二进制文件、一个文本框表单项、一个密码框表单项。文件名为 E:\s ,其内容如下:(其中的XXX代表二进制数据,如 01 02 03)abbXXXccc 客户端应该向 192.168.29.65 发送如下内容:

POST /upload_file/UploadFile HTTP/1.1
Accept: text/plain, */*
Accept-Language: zh-cn
Host: 192.168.29.65:80
Content-Type:multipart/form-data;boundary=---------------------------7d33a816d302b6
User-Agent: Mozilla/4.0 (compatible; OpenOffice.org)
Content-Length: 424
Connection: Keep-Alive -----------------------------7d33a816d302b6
Content-Disposition:form-data;
name="userfile1";
filename="E:\s"Content-Type:
application/octet-stream abbXXXccc
-----------------------------7d33a816d302b6

Content-Disposition: form-data;

name="text1" foo

-----------------------------7d33a816d302b6

Content-Disposition: form-data;

name="password1" bar

-----------------------------7d33a816d302b6--

(上面有一个回车)此内容必须一字不差,包括最后的回车。

注意:Content-Length: 424 这里的424是红色内容的总长度(包括最后的回车)
注意这一行:Content-Type: multipart/form-data; boundary=---------------------------7d33a816d302b6

根据 rfc1867, multipart/form-data是必须的.---------------------------7d33a816d302b6 是分隔符,分隔多个文件、表单项。

其中33a816d302b6 是即时生成的一个数字,用以确保整个分隔符不会在文件或表单项的内容中出现。前面的 ---------------------------7d 是 IE 特有的标志。

Mozila 为---------------------------71用手工发送这个例子,在上述的 servlet 中检验通过。

使用POST发送数据

以POST方式发送数据主要是为了向服务器发送较大量的客户端的数据,它不受URL的长度限制。POST请求将数据以URL编码的形式放在HTTP正文中,字段形式为fieldname=value,用&分隔每个字段。注意所有的字段都被作为字符串处理。实际上我们要做的就是模拟浏览器POST一个表单。以下是IE发送一个登陆表单的POST请求:

POST http://127.0.0.1/login.do HTTP/1.0
Accept: image/gif, image/jpeg, image/pjpeg, */*
Accept-Language: en-us,zh-cn;q=0.5
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Content-Length: 28
\r\n
username=admin&password=1234

要在MIDP应用程序中模拟浏览器发送这个POST请求,首先设置HttpConnection的请求方式为POST:

hc.setRequestMethod(HttpConnection.POST);

然后构造出HTTP正文:

byte[] data = "username=admin&password=1234".getBytes();

并计算正文长度,填入Content-Type和Content-Length:

hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
hc.setRequestProperty("Content-Length", String.valueOf(data.length));

然后打开OutputStream将正文写入:

OutputStream output = hc.openOutputStream();
output.write(data);

需要注意的是,数据仍需要以URL编码格式编码,由于MIDP库中没有J2SE中与之对应的URLEncoder类,因此,需要自己动手编写这个encode()方法,可以参考java.net.URLEncoder.java的源码。剩下的便是读取服务器响应,代码与GET一致,这里就不再详述。

使用multipart/form-data发送文件

如果要在MIDP客户端向服务器上传文件,我们就必须模拟一个POST multipart/form-data类型的请求,Content-Type必须是multipart/form-data。

以multipart/form-data编码的POST请求格式与application/x-www-form-urlencoded完全不同,multipart/form-data需要首先在HTTP请求头设置一个分隔符,例如ABCD:

hc.setRequestProperty("Content-Type", "multipart/form-data; boundary=ABCD");

然后,将每个字段用“--分隔符”分隔,最后一个“--分隔符--”表示结束。例如,要上传一个title字段"Today"和一个文件C:\1.txt,HTTP正文如下:

--ABCD
Content-Disposition: form-data; name="title"
\r\n
Today
--ABCD
Content-Disposition: form-data; name="1.txt"; filename="C:\1.txt"
Content-Type: text/plain
\r\n

--ABCD--
\r\n

请注意,每一行都必须以\r\n结束,包括最后一行。如果用Sniffer程序检测IE发送的POST请求,可以发现IE的分隔符类似于---------------------------7d4a6d158c9,这是IE产生的一个随机数,目的是防止上传文件中出现分隔符导致服务器无法正确识别文件起始位置。我们可以写一个固定的分隔符,只要足够复杂即可。

发送文件的POST代码如下:

String[] props = ... // 字段名
String[] values = ... // 字段值
byte[] file = ... // 文件内容
String BOUNDARY = "---------------------------7d4a6d158c9"; // 分隔符
StringBuffer sb = new StringBuffer();
// 发送每个字段:
for(int i=0; i
sb = sb.append("--");
sb = sb.append(BOUNDARY);
sb = sb.append("\r\n");
sb = sb.append("Content-Disposition: form-data; name=\""+ props[i] + "\"\r\n\r\n");
sb = sb.append(URLEncoder.encode(values[i]));
sb = sb.append("\r\n");
}
// 发送文件:
sb = sb.append("--");
sb = sb.append(BOUNDARY);
sb = sb.append("\r\n");
sb = sb.append("Content-Disposition: form-data; name=\"1\"; filename=\"1.txt\"\r\n");
sb = sb.append("Content-Type: application/octet-stream\r\n\r\n");
byte[] data = sb.toString().getBytes();
byte[] end_data = ("\r\n--" + BOUNDARY + "--\r\n").getBytes();
// 设置HTTP头:
hc.setRequestProperty("Content-Type", MULTIPART_FORM_DATA + "; boundary=" + BOUNDARY);
hc.setRequestProperty("Content-Length", String.valueOf(data.length + file.length + end_data.length));
// 输出:
output = hc.openOutputStream();
output.write(data);
output.write(file);
output.write(end_data);
// 读取服务器响应:
// TODO...

㈢ c# asp.net 通过FileUpload上传后的文档类文件打不开,或者损坏空白,提示拓展名与指定的不一致

可以重命名下文件试试,另外编写时候的代码是什么标准,有的是单方面识别的,不能兼容打开,还有就是文件的权限看看有没有允许。

㈣ 如何实现上传文件到服务器

common-fileupload是jakarta项目组开发的一个功能很强大的上传文件组件
下面先介绍上传文件到服务器(多文件上传):
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;
import org.apache.commons.fileupload.*;

public class upload extends HttpServlet {
private static final String CONTENT_TYPE = "text/html; charset=GB2312";
//Process the HTTP Post request
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType(CONTENT_TYPE);
PrintWriter out=response.getWriter();
try {
DiskFileUpload fu = new DiskFileUpload();
// 设置允许用户上传文件大小,单位:字节,这里设为2m
fu.setSizeMax(2*1024*1024);
// 设置最多只允许在内存中存储的数据,单位:字节
fu.setSizeThreshold(4096);
// 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
fu.setRepositoryPath("c://windows//temp");
//开始读取上传信息
List fileItems = fu.parseRequest(request);
// 依次处理每个上传的文件
Iterator iter = fileItems.iterator();
//正则匹配,过滤路径取文件名
String regExp=".+////(.+)$";
//过滤掉的文件类型
String[] errorType={".exe",".com",".cgi",".asp"};
Pattern p = Pattern.compile(regExp);
while (iter.hasNext()) {
FileItem item = (FileItem)iter.next();
//忽略其他不是文件域的所有表单信息
if (!item.isFormField()) {
String name = item.getName();
long size = item.getSize();
if((name==null||name.equals("")) && size==0)
continue;
Matcher m = p.matcher(name);
boolean result = m.find();
if (result){
for (int temp=0;temp<ERRORTYPE.LENGTH;TEMP++){
if (m.group(1).endsWith(errorType[temp])){
throw new IOException(name+": wrong type");
}
}
try{
//保存上传的文件到指定的目录
//在下文中上传文件至数据库时,将对这里改写
item.write(new File("d://" + m.group(1)));
out.print(name+" "+size+"");
}
catch(Exception e){
out.println(e);
}
}
else
{
throw new IOException("fail to upload");
}
}
}
}
catch (IOException e){
out.println(e);
}
catch (FileUploadException e){
out.println(e);
}

}
}
现在介绍上传文件到服务器,下面只写出相关代码:
sql2000为例,表结构如下:
字段名:name filecode
类型: varchar image
数据库插入代码为:PreparedStatement pstmt=conn.prepareStatement("insert into test values(?,?)");
代码如下:
。。。。。。
try{
这段代码如果不去掉,将一同写入到服务器中
//item.write(new File("d://" + m.group(1)));

int byteread=0;
//读取输入流,也就是上传的文件内容
InputStream inStream=item.getInputStream();
pstmt.setString(1,m.group(1));
pstmt.setBinaryStream(2,inStream,(int)size);
pstmt.executeUpdate();
inStream.close();
out.println(name+" "+size+" ");
}
。。。。。。
这样就实现了上传文件至数据库

㈤ C#中FileUpload控件获取的路径为什么会是C:\Program Files\Common Files\Microsoft\10.0文件在E盘

明显是IE的安全限制导致你程序获取路径有问题。解决方案如下:

  1. 修改IE设置,在InterNet属性中将允许文件下载启用即可。这个方法只能是暂时的,因为不同客户端的IE配置情况不同。

  2. 页面采用form提交方式,这个问题我在easyui的框架中碰到并解决。如果你request的话肯定是不行的。

    希望能帮到你,如果说的不对请见谅。

㈥ java 上传文件 问题

不用 下载相应jar包 引入就可以了 import 你懂得

㈦ 关于FileUpload控件上传文件大小限制问题

默认上传文件大小4096KB,如果要上传超过此大小的文件,会出现错误界面。可以对web.config文件做一下配置,就可以解决,解决方法如下:

1、首先创建一个名称为 file_value 的html文件。

㈧ ASP.NET 2.0高级控件之FileUpload控件

应用程序中经常需要允许用户把文件上传到web服务器 尽管在ASP NET X也可以完成该功能 但在ASP NET 中使用FileUpload控件会更简单 该控件让用户更容易地浏览和选择用于上传的文件 它包含一个浏览按钮和用于输入文件名的文本框 只要用户在文本框中输入了完全限定的文件名 无论是直接输入或通过浏览按钮选择 都可以调用FileUpload的SaveAs方法保存到磁盘上差歼尘 除了从WebControl类继承的标准成员 FileUpload控件还公开了几个只读的属性 在表 和表 列出 表 FileUpload控件属性 名 称 类型 读 写 说 明 FileContent Stream × 返回一个指向上传文件的流对象 FileName string × 返回要上传文件的名称 不包含路径信息 HasFile Boolean × 如虚禅果是true 则表示该控件有文件要上传 PostedFile HttpPostedFile × 返回已经上传文件的引用 表 列出了它所公开的只读属性 表 HttpPostedFile属性 名 称 类 型 读 写 说 明 ContentLength integer × 返回上传文件的按字节表示的文改孙件大小 ContentType string × 返回上传文件的MIME内容类型 FileName string × 返回文件在客户端的完全限定名 InputStream Stream × 返回一个指向上传文件的流对象 所有这些属性将在下面的示例中说明 为了查看FileUpload控件在实际中的运用 创建一个FileUploadDemo网站 在页面上添加一个FileUpload控件 然后 添加两个ASP NET按钮 Text属性分别设置为Save和Display ID分别设置为btnSave和btnDisplay 增加两个Label控件 并分别将ID设置为lblMesage和lblDisplay 用<br/>HTML元素分隔这些控件 切换到设计视图 通过双击每个按钮 为它们在代码隐藏文件中创建具有默认名称的Click事件处理程序 完成后的内容文件类似于示例 示例 FileUploadDemo网站的default aspx <%@ Page Language= C# AutoEventWireup= true CodeFile= Default aspx cs Inherits= _Default %><!DOCTYPE PUBLIC //W C//DTD XHTML //EN >< xmlns= ><head runat= server ><title>FileUpload Control</title></head><body><form id= form runat= server ><div><h >FileUpload Control</h ><asp:FileUpload ID= FileUpload runat= server /><br /><asp:Button ID= btnSave runat= server Text= Save OnClick= btnSave_Click /><asp:Button ID= btnDisplay runat= server Text= Display OnClick= btnDisplay_Click /><br /><br /><asp:Label ID= lblMessage runat= server /><asp:Label ID= lblDisplay runat= server /></div></form></body></>

在代码隐藏文件中 添加示例 中高亮显示的代码 非高亮显示的代码由VS 自动创建

示例 FileUploadDemo网站的Default aspx cs

using System;using System Data;using System Configuration;using System Web;using System Web Security;using System Web UI;using System Web UI WebControls;using System Web UI WebControls WebParts;using System Web UI HtmlControls;using System IO; // 使用Stream必需public partial class _Default : System Web UI Page {protected void Page_Load(object sender EventArgs e){}protected void btnSave_Click(object sender EventArgs e){string str = ;if (FileUpload HasFile){try{str += Uploading file: + FileUpload FileName;// 保存文件FileUpload SaveAs( c:\websites\uploads\ + FileUpload FileName);// 显示文件信息str += <br/>Saved As: + FileUpload PostedFile FileName;str += <br/>File Type: + FileUpload PostedFile ContentType;str += <br/>File Length (bytes): + FileUpload PostedFile ContentLength;str += <br/>PostedFile File Name: + FileUpload PostedFile FileName;}catch (Exception ex){str += <br/><b>Error</b><br/>Unable to save c:\websites\uploads\ + FileUpload FileName + <br/> + ex Message;}}else{str = No file uploaded ;}lblMessage Text = str;lblDisplay Text = ;}protected void btnDisplay_Click(object sender EventArgs e){string str = <u>File: + FileUpload FileName + </u><br/> ; if (FileUpload HasFile){try{Stream stream = FileUpload FileContent;StreamReader reader = new StreamReader(stream);string strLine = ;do{strLine = reader ReadLine( );str += strLine;} while (strLine != null);}catch (Exception ex){str += <br/><b>Error</b><br/>Unable to display + FileUpload FileName + <br/> + ex Message;}}else{str = No file uploaded ;}lblDisplay Text = str;lblMessage Text = ;}}高亮显示的using声明对于不使用完全限定命名空间 而使用Stream对象是必须的 在Save按钮的btnSave_Click事件处理程序中 FileUpload控件的HasFile属性用于检测文本框中是否输入了有效的完全限定文件名 如果文本框为空或输入的名称无效 将不会通过检测 并且lblMessage将显示 No file upladed 假定上传了一个有效文件 那么将执行try代码块中的代码 关键语句是调用File Upload控件的SaveAs方法 该方法使用硬编码路径和FileName属性传递一个完全限定的文件名 该语句可能会由于各种原因而失败 包括磁盘空间不足 无效的路径或安全问题(稍后会有更详细的说明) 如果SaveAs方法失败 则执行catch代码块 在lblMessage中显示一个错误信息 包括该异常的Message属性ex Message 如果SaveAs方法执行成功 关于上传文件的多个信息将显示在lblMessage中 这些信息通过FileUpload PostedFile(类型为HttpPostedFile)中的属性获取 Display按钮的Click事件处理程序与前面的类似 只不过它不是显示文件信息 而是显示文件内容 它通过使用FileContent属性获取表现为Stream对象的上传文件的内容 然后这个Stream对象被用于实例化一个StreamReader对象 StreamReader的Read Line方法逐行的遍历文件 然后把合并后的字符串显示在lblDisplay中 当在讨论从客户端上传文件到web服务器时 安全是非常让人关注的 须注意两点 首先 使用这种方式会公开web服务器 从而会有非常大的安全漏洞 为此要特别细心 因为这样不仅可以上传病毒 木马和其他恶意软件 还会存在客户端浏览web服务器目录结构的危险 因此 应该使用硬编码目标目录 至少严格限定在哪里保存上传的文件 另外 要注意的一点是 允许在磁盘写文件所必需的权限 在开发web应用程序时 一般情况下 开发机器同时也是web服务器 特别是使用VS 默认的开发模式 在该模式下使用的是内置的web服务器 并且不通过IIS访问网站而是由文件系统访问网站 这样 永远也不会有权限问题 然而 当网站部署到产品服务器上 且该网站通过IIS和虚拟目录来访问时 就会出现问题 这是因为运行ASP NET的账户必须拥有对用于保存上传文件的目录的写权限 在Windows /XP中 账户的名称是ASPNET 在Windows Server 中 写权限必须分配给IIS_WPG账户组 利用FileUpload控件并结合良好的安全防护 用户可以把自己的文件传送到网站 以丰富网站功能 lishixin/Article/program/net/201311/13538

热点内容
scratch少儿编程课程 发布:2025-04-16 17:11:44 浏览:623
荣耀x10从哪里设置密码 发布:2025-04-16 17:11:43 浏览:351
java从入门到精通视频 发布:2025-04-16 17:11:43 浏览:66
php微信接口教程 发布:2025-04-16 17:07:30 浏览:291
android实现阴影 发布:2025-04-16 16:50:08 浏览:786
粉笔直播课缓存 发布:2025-04-16 16:31:21 浏览:336
机顶盒都有什么配置 发布:2025-04-16 16:24:37 浏览:200
编写手游反编译都需要学习什么 发布:2025-04-16 16:19:36 浏览:795
proteus编译文件位置 发布:2025-04-16 16:18:44 浏览:353
土压缩的本质 发布:2025-04-16 16:13:21 浏览:581