1. 如何獲得FileUpLoad控制項上傳文件的文件流
FileStream fs = new FileStream(FileUpLoad的ID.PostedFile.FileName, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
2. 如何流傳輸大文件
問題?解法要流傳輸大文件,需要添加傳輸解碼(Transfer-Encoding)區塊頭,這樣才能一邊下載一邊顯示。否則,瀏覽器將緩沖所有數據直到下載完畢才顯示。)例子# Simple streaming server demonstration # Uses time.sleep to emulate a large file read import web import time urls = ( "/", "count_holder", "/(.*)", "count_down", ) app = web.application(urls, globals()) class count_down: def GET(self,count): # These headers make it work in browsers web.header('Content-type','text/html') web.header('Transfer-Encoding','chunked') yield 'Prepare for Launch!' j = 'Liftoff in %s...' yield '' count = int(count) for i in range(count,0,-1): out = j % i time.sleep(1) yield out yield '' time.sleep(1) yield 'Lift off' class count_holder: def GET(self): web.header('Content-type','text/html') web.header('Transfer-Encoding','chunked') boxes = 4 delay = 3 countdown = 10 for i in range(boxes): output = '' % (countdown - i) yield output time.sleep(delay) if __name__ == "__main__": app.run()
3. 如何實現java 流式文件上傳
@Controller
public class UploadController extends BaseController {
private static final Log log = LogFactory.getLog(UploadController.class);
private UploadService uploadService;
private AuthService authService;
/**
* 大文件分成小文件塊上傳,一次傳遞一塊,最後一塊上傳成功後,將合並所有已經上傳的塊,保存到File Server
* 上相應的位置,並返回已經成功上傳的文件的詳細屬性. 當最後一塊上傳完畢,返回上傳成功的信息。此時用getFileList查詢該文件,
* 該文件的uploadStatus為2。client請自行處理該狀態下文件如何顯示。(for UPS Server)
*
*/
@RequestMapping("/core/v1/file/upload")
@ResponseBody
public Object upload(HttpServletResponse response,
@RequestParam(value = "client_id", required = false) String appkey,
@RequestParam(value = "sig", required = false) String appsig,
@RequestParam(value = "token", required = false) String token,
@RequestParam(value = "uuid", required = false) String uuid,
@RequestParam(value = "block", required = false) String blockIndex,
@RequestParam(value = "file", required = false) MultipartFile multipartFile,
@RequestParam Map<String, String> parameters) {
checkEmpty(appkey, BaseException.ERROR_CODE_16002);
checkEmpty(token, BaseException.ERROR_CODE_16007);
checkEmpty(uuid, BaseException.ERROR_CODE_20016);
checkEmpty(blockIndex, BaseException.ERROR_CODE_20006);
checkEmpty(appsig, BaseException.ERROR_CODE_10010);
if (multipartFile == null) {
throw new BaseException(BaseException.ERROR_CODE_20020);// 上傳文件不存在
}
Long uuidL = parseLong(uuid, BaseException.ERROR_CODE_20016);
Integer blockIndexI = parseInt(blockIndex, BaseException.ERROR_CODE_20006);
Map<String, Object> appMap = getAuthService().validateSigature(parameters);
AccessToken accessToken = CasUtil.checkAccessToken(token, appMap);
Long uid = accessToken.getUid();
String bucketUrl = accessToken.getBucketUrl();
// 從上傳目錄拷貝文件到工作目錄
String fileAbsulutePath = null;
try {
fileAbsulutePath = this.File(multipartFile.getInputStream(), multipartFile.getOriginalFilename());
} catch (IOException ioe) {
log.error(ioe.getMessage(), ioe);
throw new BaseException(BaseException.ERROR_CODE_20020);// 上傳文件不存在
}
File uploadedFile = new File(Global.UPLOAD_TEMP_DIR + fileAbsulutePath);
checkEmptyFile(uploadedFile);// file 非空驗證
Object rs = uploadService.upload(uuidL, blockIndexI, uid, uploadedFile, bucketUrl);
setHttpStatusOk(response);
return rs;
}
// TODO 查看下這里是否有問題
// 上傳文件非空驗證
private void checkEmptyFile(File file) {
if (file == null || file.getAbsolutePath() == null) {
throw new BaseException(BaseException.ERROR_CODE_20020);// 上傳文件不存在
}
}
/**
* 寫文件到本地文件夾
*
* @throws IOException
* 返回生成的文件名
*/
private String File(InputStream inputStream, String fileName) {
OutputStream outputStream = null;
String tempFileName = null;
int pointPosition = fileName.lastIndexOf(".");
if (pointPosition < 0) {// myvedio
tempFileName = UUID.randomUUID().toString();// 94d1d2e0-9aad-4dd8-a0f6-494b0099ff26
} else {// myvedio.flv
tempFileName = UUID.randomUUID() + fileName.substring(pointPosition);// 94d1d2e0-9aad-4dd8-a0f6-494b0099ff26.flv
}
try {
outputStream = new FileOutputStream(Global.UPLOAD_TEMP_DIR + tempFileName);
int readBytes = 0;
byte[] buffer = new byte[10000];
while ((readBytes = inputStream.read(buffer, 0, 10000)) != -1) {
outputStream.write(buffer, 0, readBytes);
}
return tempFileName;
} catch (IOException ioe) {
// log.error(ioe.getMessage(), ioe);
throw new BaseException(BaseException.ERROR_CODE_20020);// 上傳文件不存在
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
}
}
}
}
/**
* 測試此服務是否可用
*
* @param response
* @return
* @author zwq7978
*/
@RequestMapping("/core/v1/file/testServer")
@ResponseBody
public Object testServer(HttpServletResponse response) {
setHttpStatusOk(response);
return Global.SUCCESS_RESPONSE;
}
public UploadService getUploadService() {
return uploadService;
}
public void setUploadService(UploadService uploadService) {
this.uploadService = uploadService;
}
public void setAuthService(AuthService authService) {
this.authService = authService;
}
public AuthService getAuthService() {
return authService;
}
}
4. 有關java上傳和File以及FileInputStream的區別
File不屬於流,它只是用來屏閉不同文件系統,用來統一 描述文件的實體BEAN,new File時給它傳入文件名稱或是路徑,它就會去根據參數查找對應的文件屬性然後封裝 成實體。用來處理判斷該路徑是一個文件還是路徑,文件或路徑的許可權,修改時間等等,路徑的子路徑list等等目錄操作。
File不屬於文件流,只能代表一個文件或是目錄的路徑名而已.
而FileInputStream關注的是文件的內容,是用來進行文件讀寫等操作的二進制流類。大多數情況下,構造FileInputStream 時傳遞一個File對象做參數,也可以直接傳遞String的文件路徑。
這個容易混淆的問題在FTP時候很容易出現,因為客戶端點擊瀏覽本地文件後在上傳時在伺服器端如果直接把客戶端的 文件名稱拿到,然後用new File(「文件名稱路徑」),再用new InputStream(File)來上傳到FTP的話,其實就是相當於伺服器 端在伺服器本地找File(「文件名稱路徑」),然後往FTP上傳,這是錯誤的。我們希望的是上傳客戶端的文件,而不是 伺服器端的文件,所以這里應該是直接用apache的FileItem.getInputStream的結果直接upload,如下: InputStream fileIn = item.getInputStream();////如果直接寫成這樣new FileInputStream(filePath);就會出現在伺服器本機找file上傳的問題 //可以查看item.getInputStream()最後其實是從memoryOutputStream(內存里記憶的客戶端文件流)來取流的句柄的。
5. 如何解析HTTP POST文件上傳流
POST /upload.jsp HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Content-Type: multipart/form-data; boundary=---------------------------7da29f2d890386
Host: abc.com
Content-Length: 1516663
Connection: Keep-Alive
Cache-Control: no-cache
-----------------------------7da29f2d890386
Content-Disposition: form-data; name="ServerPath"
localhost
-----------------------------7da29f2d890386
Content-Disposition: form-data; name="id"
12323123
-----------------------------7da29f2d890386
Content-Disposition: form-data; name="FileData"; filename="D:\set.pdf"
Content-Type: application/pdf
%PDF-1.6
%����
1 0 obj<</Type/Page/Contents 2 0 R/Parent 3 0 R/Resources 4 0 R/CropBox[0 0 595.22 842]/MediaBox[0 0 595.22 842]/Rotate 0>>
endobj
4 0 obj<</ColorSpace<</Cs6 5 0 R>>/ExtGState<</GS1 6 0 R>>/ProcSet[/PDF/Text]/Font<</F1 7 0 R/F3 8 0 R/TT3 9 0 R/F2 10 0 R>>>>
endobj
2 0 obj <</Filter/FlateDecode/Length 1887>>stream
-----------------------------7da29f2d890386--
6. java 文件傳輸用什麼流
FileInputStream fis = new FileInputStream("d://xxx");
FileOutputStream fos = new FileOutputStream(fis);
fos.write;
fos.close;
7. 如何利用位元組流實現java的文件上傳下載
實現上傳下載實際上就是io的轉換。舉例:
import hkrt.b2b.view.util.Log;
import hkrt.b2b.view.util.ViewUtil;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class CCFCCBFTP {
/**
* 上傳文件
*
* @param fileName
* @param plainFilePath 明文文件路徑路徑
* @param filepath
* @return
* @throws Exception
*/
public static String fileUploadByFtp(String plainFilePath, String fileName, String filepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FTPClient ftpClient = new FTPClient();
String bl = "false";
try {
fis = new FileInputStream(plainFilePath);
bos = new ByteArrayOutputStream(fis.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
Log.info("加密上傳文件開始");
Log.info("連接遠程上傳伺服器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
FTPFile[] fs;
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(filepath)) {
bl="true";
ftpClient.changeWorkingDirectory("/"+filepath+"");
}
}
Log.info("檢查文件路徑是否存在:/"+filepath);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon( "查詢文件路徑不存在:"+"/"+filepath);
return bl;
}
ftpClient.setBufferSize(1024);
ftpClient.setControlEncoding("GBK");
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
ftpClient.storeFile(fileName, fis);
Log.info("上傳文件成功:"+fileName+"。文件保存路徑:"+"/"+filepath+"/");
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}
}
/**
*下載文件
*
* @param localFilePath
* @param fileName
* @param routeFilepath
* @return
* @throws Exception
*/
public static String fileDownloadByFtp(String localFilePath, String fileName,String routeFilepath) throws Exception {
FileInputStream fis = null;
ByteArrayOutputStream bos = null;
FileOutputStream fos = null;
FTPClient ftpClient = new FTPClient();
String SFP = System.getProperty("file.separator");
String bl = "false";
try {
Log.info("下載並解密文件開始");
Log.info("連接遠程下載伺服器"+CCFCCBUtil.CCFCCBHOSTNAME+":"+22);
ftpClient.connect(CCFCCBUtil.CCFCCBHOSTNAME, 22);
ftpClient.login(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBLOGINPASSWORD);
// ftpClient.connect(CMBCUtil.CMBCHOSTNAME, 2021);
// ftpClient.login(CMBCUtil.CMBCLOGINNAME, CMBCUtil.CMBCLOGINPASSWORD);
FTPFile[] fs;
ftpClient.makeDirectory(routeFilepath);
ftpClient.changeWorkingDirectory(routeFilepath);
bl = "false";
fs = ftpClient.listFiles();
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
bl = "true";
Log.info("下載文件開始。");
ftpClient.setBufferSize(1024);
// 設置文件類型(二進制)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
InputStream is = ftpClient.retrieveFileStream(fileName);
bos = new ByteArrayOutputStream(is.available());
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) != -1) {
bos.write(buffer, 0, count);
}
bos.flush();
fos = new FileOutputStream(localFilePath+SFP+fileName);
fos.write(bos.toByteArray());
Log.info("下載文件結束:"+localFilePath);
}
}
Log.info("檢查文件是否存:"+fileName+" "+bl);
if("false".equals(bl)){
ViewUtil.dataSEErrorPerformedCommon("查詢無結果,請稍後再查詢。");
return bl;
}
return bl;
} catch (Exception e) {
throw e;
} finally {
if (fis != null) {
try {
fis.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (bos != null) {
try {
bos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
if (fos != null) {
try {
fos.close();
} catch (Exception e) {
Log.info(e.getLocalizedMessage(), e);
}
}
}
}}
備註:以上方法就實現了流的二進制上傳下載轉換,只需要將伺服器連接部分調整為本地的實際ftp服務用戶名和密碼即可。
8. 用Java和上傳文件到資料庫 上傳時只用到了輸入流 為啥下載時用到了輸入流和輸出流
代碼如下:importjava.io.*;/***復制文件夾或文件夾*/publicclassCopyDirectory{//源文件夾staticStringurl1="f:/photos";//目標文件夾staticStringurl2="d:/tempPhotos";publicstaticvoidmain(Stringargs[])throwsIOException{//創建目標文件夾(newFile(url2)).mkdirs();//獲取源文件夾當前下的文件或目錄File[]file=(newFile(url1)).listFiles();for(inti=0;i
9. 如何把一個文件從伺服器上通過流和介面傳送到另一個伺服器上
你的問題不夠清楚
啥叫流和介面
如果要上傳文件到伺服器A上
內網里只要共享就可以
外網的話伺服器A開一個FTP就可以
10. 如何獲取上傳文件的輸入流
這個用到java io的知識:
Java.io包幾乎包含了所有操作輸入、輸出需要的類。所有這些流類代表了輸入源和輸出目標。
Java.io包中的流支持很多種格式,比如:基本類型、對象、本地化字元集等等。
一個流可以理解為一個數據的序列。輸入流表示從一個源讀取數據,輸出流表示向一個目標寫數據。
Java為I/O提供了強大的而靈活的支持,使其更廣泛地應用到文件傳輸和網路編程中。
但本節講述最基本的和流與I/O相關的功能。我們將通過一個個例子來學習這些功能。
輸入:
Java的控制台輸入由System.in完成。
為了獲得一個綁定到控制台的字元流,你可以把System.in包裝在一個BufferedReader 對象中來創建一個字元流。
下面是創建BufferedReader的基本語法:
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
BufferedReader對象創建後,我們便可以使用read()方法從控制台讀取一個字元,或者用readLine()方法讀取一個字元串。
實例:
// 使用 BufferedReader 在控制台讀取字元
import java.io.*;
public class BRRead {
public static void main(String args[]) throws IOException
{
char c;
// 使用 System.in 創建 BufferedReader
BufferedReader br = new BufferedReader(new
InputStreamReader(System.in));
System.out.println("Enter characters, 'q' to quit.");
// 讀取字元
do {
c = (char) br.read();
System.out.println(c);
} while(c != 'q');
}
}