回答
使用RandomAccessFile。我相信這已經被覆蓋了。
java file input with rewind()/reset() capability
基本上你只尋求切入點,寫上你想從那裏無論多少字節,並記住你停止從寫點。
咦?這完全沒有必要。你不需要這樣做。順便提一下,我認爲問題是關於客戶端而不是服務器端。 – 2011-05-20 16:22:52
@Robin我想OP會做出決定,但我可能誤解了這個問題。 – KyleM 2011-05-20 16:30:22
您可以簡單地將文件分開,使用Socket API發送,然後重新組裝文件。
嘗試Apache Commons upload。它支持流媒體,可能適合你。
*可以使用plupload完成。 這裏是示例。 我的index.html是下: -
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Upload</title>
<!-- production -->
<script type="text/javascript" src="js/plupload.full.min.js"></script>
<!-- debug
<script type="text/javascript" src="../js/moxie.js"></script>
<script type="text/javascript" src="../js/plupload.dev.js"></script>
-->
</head>
<body style="font: 13px Verdana; background: #eee; color: #333">
<div id="filelist"></div>
<br />
<button id="pickfiles" >Select file</button>
<button id="uploadfiles" >Upload</button>
<div id="container">
</div>
<br />
<pre id="console"></pre>
<script type="text/javascript">
// Custom example logic
var uploader = new plupload.Uploader({
runtimes : 'html5',
browse_button : 'pickfiles', // you can pass an id...
container: document.getElementById('container'), // ... or DOM Element itself
url : 'UploadAction',//upload.php
chunk_size : '1mb',
method:'POST',
flash_swf_url : 'js/Moxie.swf',
silverlight_xap_url : 'js/Moxie.xap',
filters : {
max_file_size : '100gb',
mime_types: [
{title : "Image files", extensions : "jpg,gif,png"},
{title : "Zip files", extensions : "zip,txt,vmdk"}
]
},
init: {
PostInit: function() {
document.getElementById('filelist').innerHTML = '';
document.getElementById('uploadfiles').onclick = function() {
uploader.start();
return false;
};
},
FilesAdded: function(up, files) {
plupload.each(files, function(file) {
document.getElementById('filelist').innerHTML += '<div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>';
});
},
UploadProgress: function(up, file) {
document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span>' + file.percent + "%</span>";
},
Error: function(up, err) {
document.getElementById('console').appendChild(document.createTextNode("\nError #" + err.code + ": " + err.message));
}
}
});
uploader.init();
</script>
</body>
</html>
<!-- end snippet -->
我的Java後端代碼(Servlet的)是下: -
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItemIterator;
import org.apache.commons.fileupload.FileItemStream;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.util.Streams;
public class UploadAction extends HttpServlet {
private static final long serialVersionUID = 3447685998419256747L;
private static final String RESP_SUCCESS = "{\"jsonrpc\" : \"2.0\", \"result\" : \"success\", \"id\" : \"id\"}";
private static final String RESP_ERROR = "{\"jsonrpc\" : \"2.0\", \"error\" : {\"code\": 101, \"message\": \"Failed to open input stream.\"}, \"id\" : \"id\"}";
public static final String JSON = "application/json";
public static final int BUF_SIZE = 2 * 1024;
public static final String FileDir = "/home/asjha/uploads/";
private int chunk;
private int chunks;
private String name;
private String user;
private String time;
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String responseString = RESP_SUCCESS;
boolean isMultipart = ServletFileUpload.isMultipartContent(req);
if(isMultipart){
ServletFileUpload upload = new ServletFileUpload();
try {
FileItemIterator iter = upload.getItemIterator(req);
while (iter.hasNext()) {
FileItemStream item = iter.next();
InputStream input = item.openStream();
// Handle a form field.
if(item.isFormField()){
String fileName = item.getFieldName();
String value = Streams.asString(input);
if("name".equals(fileName)){
this.name = value;
}else if("chunks".equals(fileName)){
this.chunks = Integer.parseInt(value);
}else if("chunk".equals(fileName)){
this.chunk = Integer.parseInt(value);
}else if("user".equals(fileName)){
this.user = value;
}else if("time".equals(fileName)){
this.time = value;
}
}
// Handle a multi-part MIME encoded file.
else {
File dstFile = new File(FileDir);
if (!dstFile.exists()){
dstFile.mkdirs();
}
File dst = new File(dstFile.getPath()+ "/" + this.name);
saveUploadFile(input, dst);
}
}
}
catch (Exception e) {
responseString = RESP_ERROR;
e.printStackTrace();
}
}
// Not a multi-part MIME request.
else {
responseString = RESP_ERROR;
}
if(this.chunk == this.chunks - 1){
System.out.println("name"+this.name);
}
resp.setContentType(JSON);
byte[] responseBytes = responseString.getBytes();
resp.setContentLength(responseBytes.length);
ServletOutputStream output = resp.getOutputStream();
output.write(responseBytes);
output.flush();
}
private void saveUploadFile(InputStream input, File dst) throws IOException {
OutputStream out = null;
try {
if (dst.exists()) {
out = new BufferedOutputStream(new FileOutputStream(dst, true),
BUF_SIZE);
} else {
out = new BufferedOutputStream(new FileOutputStream(dst),
BUF_SIZE);
}
byte[] buffer = new byte[BUF_SIZE];
int len = 0;
while ((len = input.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (null != input) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != out) {
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
請參考plupload的細節,在GitHub上,你可以看到示例項目由jakobadam和岩石。
請讓我知道是否需要多個文件上傳。使用plupload,我們可以上傳任意數量的任意大小的文件。此示例適用於超大尺寸的單個文件上傳。 不要忘記包含plupload.full.min.js。希望這有助於*強調文本**
如果我們沒有像nginx一樣的超時問題,也可以使用Apache commons。Plupload提供了許多使用flash,applet等上傳的方法。 – 2015-04-08 19:16:13
如果您使用Java,請使用Arivus Nioserver gradle dependency - > compile'org.arivu:nioserver:1.0.3'。沒有文件大小限制。
- 1. 我們如何在rails中以大塊的形式上傳大文件?
- 2. 如何使用PHP FTP模塊以塊的形式上傳文件?
- 3. 使用Angular 4以塊形式上傳文件
- 4. 如何使用ng-Flow在ASP.NET中以塊的形式上傳文件
- 5. Android - 如何使用OkHTTP以塊的形式上傳視頻?
- 6. 用PHP中的blueimp以塊的形式上傳文件
- 7. 如何使用jQuery文件以嵌套形式上傳?
- 8. 以clob的形式上傳excel文件
- 9. 通過WebDav以塊的形式上傳文件
- 10. 使用Web服務上傳Sharepoint上的大型文件(大塊)
- 11. 以Bootstrap形式上傳文件
- 12. 如何通過塊使用節點js上傳大文件
- 13. 如何使用java httpclient實現HTTP Post分塊上傳大文件?
- 14. 以大塊的形式讀取大文件c#
- 15. 如何使用AsiHttpRequest上傳大文件
- 16. 如何使用ajax上傳大文件?
- 17. 如何使用NHibernate上傳大文件?
- 18. 使用java servlet 3.0文件上傳,如何獲取最大文件大小值
- 19. 如何使用java上傳文件?
- 20. 如何使用java上傳文件?
- 21. 以大塊的形式顯示大圖
- 22. Symfony形式。文件上傳
- 23. 如何以高效的方式上傳大文件到mediawiki
- 24. 如何計算上傳大文件的最佳塊大小
- 25. 當上傳文件大小大$形式 - > isValid()的返回null
- 26. 用Java以塊的形式播放MP3?
- 27. 如何以加密形式上傳文件
- 28. 如何以窗口形式上傳文件?
- 29. 以文件上傳的形式預先選擇一個文件
- 30. 如何上傳大文件?
下來的選民可以評論他們爲什麼投票嗎? – 2011-05-20 16:17:04