當前位置:首頁 » 文件管理 » 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 瀏覽:624
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:353
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:68
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:293
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:786
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:336
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:201
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:795
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:353
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:581