⑴ asp.net用多線程上傳大文件(500MB~2G)
大文件上傳,進度條效果推薦你用uploadify插件結合asp.net來做,這個的實現網上有例子,我這里自己也做了一個,上傳頁面是uploadify3.2/index.html ,上傳處理程序是upload.ashx。用vs2010製作,需要framework4.0環境的支持。 經測試打文件上傳功能已經穩定,,進度條顯示效果友好。
最近打算把原來的asp網站改成asp.net的,所以做了這個,你可以參考一下。
⑵ Asp.Net如何實現多線程上傳大文件,最好有控
想要想上傳大文件,必須在web.config文件中進行配置。
在<system.web>節點中添加如下代碼即可:
<httpRuntime maxRequestLength="2097151"/>
這個代碼就是表示設置最大請求值,上傳文件也就相當於請求。maxRequestLength單位為KB,最大值為:2097151.如果不設置,默認為4096 KB (4 MB)。
也就是說上傳的文件最大可以上傳2G以內的文件。
一般沒有配置的話,默認只能上傳4M以內的文件。配置了的話就可以上傳更大的文件。
⑶ java上傳多個文件時,怎樣創建多個線程,一一對應文件
package com.myfactory.abstractfactory;
/**
* 僅僅定義生產同一族產品的兩個不同等級結構的產品介面,具體的實現由子類工廠來實現
* @author xing
*
*/
public abstract class AbstractFactory {
public abstract Car getCar();
public abstract Gun getGun();
}
⑷ Java如何實現多線程傳輸文件,就像迅雷下載一樣,開十多個線程分段傳送位元組流
程序分Server和Client
伺服器端打開偵聽的埠,一有客戶端連接就創建兩個新的線程來負責這個連接
一個負責客戶端發送的信息(ClientMsgCollectThread 類),
另一個負責通過該Socket發送數據(ServerMsgSendThread )
Server.java代碼如下:
/*
* 創建日期 2009-3-7
*
* TODO 要更改此生成的文件的模板,請轉至
* 窗口 - 首選項 - Java - 代碼樣式 - 代碼模板
*/
package faue.MutiUser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 伺服器端
*
* @author Faue
*/
public class Server extends ServerSocket {
private static final int SERVER_PORT = 10000;
/**
* 構造方法,用於實現連接的監聽
*
* @throws IOException
*/
public Server() throws IOException {
super(SERVER_PORT);
try {
while (true) {
Socket socket = super.accept();
new Thread(new ClientMsgCollectThread(socket), "getAndShow"
+ socket.getPort()).start();
new Thread(new ServerMsgSendThread(socket), "send"
+ socket.getPort()).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
new Server();
}
/**
* 該類用於創建接收客戶端發來的信息並顯示的線程
*
* @author Faue
* @version 1.0.0
*/
class ClientMsgCollectThread implements Runnable {
private Socket client;
private BufferedReader in;
private StringBuffer inputStringBuffer = new StringBuffer("Hello");
/**
* 得到Socket的輸入流
*
* @param s
* @throws IOException
*/
public ClientMsgCollectThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream(), "GBK"));
}
public void run() {
try {
while (!client.isClosed()) {
inputStringBuffer.delete(0, inputStringBuffer.length());
inputStringBuffer.append(in.readLine());
System.out.println(getMsg(inputStringBuffer.toString()));
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
}
}
/**
* 構造顯示的字元串
*
* @param line
* @return
*/
private String getMsg(String line) {
return client.toString() + " says:" + line;
}
}
/**
* 該類用於創建發送數據的線程
*
* @author Faue
* @version 1.0.0
*/
class ServerMsgSendThread implements Runnable {
private Socket client;
private PrintWriter out;
private BufferedReader keyboardInput;
private StringBuffer outputStringBuffer = new StringBuffer("Hello");
/**
* 得到鍵盤的輸入流
*
* @param s
* @throws IOException
*/
public ServerMsgSendThread(Socket s) throws IOException {
client = s;
out = new PrintWriter(client.getOutputStream(), true);
keyboardInput = new BufferedReader(new InputStreamReader(System.in));
}
public void run() {
try {
while (!client.isClosed()) {
outputStringBuffer.delete(0, outputStringBuffer.length());
outputStringBuffer.append(keyboardInput.readLine());
out.println(outputStringBuffer.toString());
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
}
}
}
}
客戶端:
實現基於IP地址的連接,連接後也創建兩個線程來實現信息的發送和接收
/*
* 創建日期 2009-3-7
*
*/
package faue.MutiUser;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
/**
* 客戶端
*
* @author Faue
*/
public class Client {
private Socket mySocket;
/**
* 創建線程的構造方法
*
* @param IP
* @throws IOException
*/
public Client(String IP) throws IOException {
try {
mySocket = new Socket(IP, 10000);
new Thread(new ServerMsgCollectThread(mySocket), "getAndShow"
+ mySocket.getPort()).start();
new Thread(new ClientMsgSendThread(mySocket), "send"
+ mySocket.getPort()).start();
} catch (IOException e) {
//e.printStackTrace();
System.out.println("Server.IP:" + IP
+ " port:10000 can not be Connected");
}
}
public static void main(String[] args) throws IOException {
try {
new Client(args[0]);
} catch (Exception e) {
System.out.println("輸入的IP地址錯誤");
}
}
/**
* 該類用於創建接收服務端發來的信息並顯示的線程
*
* @author Faue
* @version 1.0.0
*/
class ServerMsgCollectThread implements Runnable {
private Socket client;
private BufferedReader in;
private StringBuffer inputStringBuffer = new StringBuffer("Hello");
/**
* 得到Socket的輸入流
*
* @param s
* @throws IOException
*/
public ServerMsgCollectThread(Socket s) throws IOException {
client = s;
in = new BufferedReader(new InputStreamReader(client
.getInputStream(), "GBK"));
}
public void run() {
try {
while (!client.isClosed()) {
inputStringBuffer.delete(0, inputStringBuffer.length());
inputStringBuffer.append(in.readLine());
System.out.println(getMsg(inputStringBuffer.toString()));
}
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
System.exit(0);
}
}
/**
* 構造輸入字元串
*
* @param line
* @return
*/
private String getMsg(String line) {
return client.toString() + " says:" + line;
}
}
/**
* 該類用於創建發送數據的線程
*
* @author Faue
* @version 1.0.0
*/
class ClientMsgSendThread implements Runnable {
private Socket client;
private PrintWriter out;
private BufferedReader keyboardInput;
private StringBuffer outputStringBuffer = new StringBuffer("Hello");
/**
* 得到鍵盤的輸入流
*
* @param s
* @throws IOException
*/
public ClientMsgSendThread(Socket s) throws IOException {
client = s;
out = new PrintWriter(client.getOutputStream(), true);
keyboardInput = new BufferedReader(new InputStreamReader(System.in));
}
public void run() {
try {
while (!client.isClosed()) {
outputStringBuffer.delete(0, outputStringBuffer.length());
outputStringBuffer.append(keyboardInput.readLine());
out.println(outputStringBuffer.toString());
}
out.println("--- See you, bye! ---");
} catch (IOException e) {
//e.printStackTrace();
System.out.println(client.toString() + " is closed!");
System.exit(0);
}
}
}
}
如果對您有幫助,請記得採納為滿意答案,謝謝!祝您生活愉快!
vaela
⑸ VC如何實現多線程文件傳輸
發送端,將文件分成N份(如5),FILE1(0-a位元組),FILE2(a-b位元組),FILE3(b-c位元組),FILE4(c-d位元組),FILE5(d-文件長度)。 發送可以使用M個線程(如5),THREAD1負責發送FILE1,依次類推,發送的每個數據包包括如下內容:文件內容的長度,文件內容,文件內容起始點相對於整個文件的位置,文件內容相對於整個文件的位置。例如:文件A的總長度為100000位元組,則可以先發送一個數據包給接收端,讓其准備接收,接著發送 4000(長度),....(內容的二進制流),0(起始),4000(結束)。 接收端根據接收的包寫文件即可。 http://www.vckbase.com/document/viewdoc/?id=448 看一下吧
⑹ js 如何實現線程上傳文件
js上傳?????
一般來講,上傳的文件超過百M,都需要插件了,但幾十M就很卡,要麼程序寫的有問題,要麼你的機器有問題。
樓主去試試人家的網盤上傳,看看自己的機器卡不卡~
⑺ 要用java實現多線程的文件上傳該如何去做
的資源消耗,因此,在進行同類事情,需要進行互相的通訊等等事情的時候,都採用線程來進行處理。
對於只做固定的一件事情(比如:計算1+2+3+...+9999999)來說,其性能上不會比採用單線程的整體效率高,原因是,同時都是要做這么多運算,採用多線程的話,系統在進行線程調度的過程中喙浪費一些資源和時間,從而性能上下降。
那麼,多線程是否就沒有存在的意義了呢?答案當然不是的。多線程還是有存在的價值的,我們在寫輸入流輸出流,寫網路程序等等的時候,都會出現阻塞的情況,如果說,我們不使用多線程的話,從A中讀數據出來的時候,A因為沒有準備好,而整個程序阻塞了,其他的任何事情都沒法進行。如果採用多線程的話,你就不用擔心這個問題了。還舉個例子:游戲中,如果A角色和B角色採用同一個線程來處理的話,那麼,很有可能就會出現只會響應A角色的操作,而B角色就始終被佔用了的情況,這樣,玩起來肯定就沒勁了。
因此,線程是有用的,但也不是隨便亂用,亂用的話,可能造成性能的低下,它是有一點的適用范圍的,一般我認為:需要響應多個人的事情,從設計上需要考慮同時做一些事情(這些事情很多情況下可能一點關系都沒有,也有可能有一些關系的)。
使用多線程的時候,如果某些線程之間涉及到資源共享、互相通訊等等問題的時候,一定得注意線程安全的問題,根據情況看是不是需要使用synchronized關鍵字。
另外,站長團上有產品團購,便宜有保證
⑻ 多線程 同時上傳多個文件
另起線程上傳,通過事件更新界面。
⑼ 什麼是多線程上傳/下載文件
正常的IE頁面文件下載與上傳都只有一個線程,有些軟體可以實現多線程文件傳輸,就好象在傳輸文件的時候,多開了幾條線路,不過次種方法會擠占其他用戶的線程,佔領伺服器帶寬資源,所以一般的小規模網站為了保證其資源的可用性,往往不允許用戶使用多線程傳輸,不使用第三方上傳文件,直接在網站給出的頁面里通過IE上傳的話,就一定是單線程上傳,不會被封帳號,另外,網路U盤並不完全可靠,重要文件還是盡量在本地硬碟上進行備份
⑽ 多線程的上傳文件系統怎麼做
asp.net頁面通常只能使用流行的瀏覽器支持的技術,擴展的客戶端開發技術不在asp.net范圍內。
假設你使用asp.net開發一個webService或者WCF服務,它的api可以這樣設計(以WCF為例):
[ServiceContract]
public interface IFileService
{
[OperationContract]
void Upload(string fileName, long position, byte[] data);
}
這表示對文件fileName,從隨機存取位置position開始寫入data。客戶端的應用程序(但是不是asp.net,因為asp.net只是一個伺服器程序,客戶端還是瀏覽器、腳本而不是asp.net在操作的)可以讀取本地文件,然後(例如)按照每10k位元組作為一個塊去順序或者多線程調用服務,分塊的好處在於如果通訊中斷則可以斷點續傳。