매우 간단한 JavaFx 클라이언트를 사용하여 파일을 업로드하고 있습니다. 내가 바이트 덩어리 버퍼를 사용하여 1 MB 청크 파일을 읽고 PHP 스크립트에 여러 부분 POST를 사용하여 업로드하십시오. 각 청크가 업로드 된 후 진행 상황을 보여주기 위해 클라이언트의 진행률 막대를 업데이트하고 싶습니다. 업로드 진행 상태가 올바르게 표시되지만 진행률 막대는 업데이트되지 않습니다. bind 키워드를 사용하고 있습니다.Java Fx 데이터 바인딩이 파일 읽기와 작동하지 않습니다.
저는 JavaFx 전문가가 아니며 일부는 제 실수를 지적 할 수 있기를 기대합니다. 여기 (Upload 1GB files using chunking in PHP)에 게시 된 문제
/*
* Main.fx
*
* Created on Mar 16, 2010, 1:58:32 PM
*/
package webgloo;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.geometry.VPos;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.layout.HBox;
import javafx.scene.layout.LayoutInfo;
import javafx.scene.text.Font;
import javafx.scene.control.ProgressBar;
import java.io.FileInputStream;
/**
* @author rajeev jha
*/
var totalBytes:Float = 1;
var bytesWritten:Float = 0;
var progressUpload:Float;
var uploadURI = "http://www.test1.com/test/receiver.php";
var postMax = 1024000 ;
function uploadFile(inputFile: java.io.File) {
totalBytes = inputFile.length();
bytesWritten = 1;
println("To-Upload - {totalBytes}");
var is = new FileInputStream(inputFile);
var fc = is.getChannel();
//1 MB byte buffer
var chunkCount = 0;
var bb = java.nio.ByteBuffer.allocate(postMax);
while(fc.read(bb) >= 0){
println("loop:start");
bb.flip();
var limit = bb.limit();
var bytes = GigaFileUploader.getBufferBytes(bb.array(), limit);
var content = GigaFileUploader.createPostContent(inputFile.getName(), bytes);
GigaFileUploader.upload(uploadURI, content);
bytesWritten = bytesWritten + limit ;
progressUpload = 1.0 * bytesWritten/totalBytes ;
println("Progress is - {progressUpload}");
chunkCount++;
bb.clear();
println("loop:end");
}
}
var label = Label {
font: Font { size: 12 }
text: bind "Uploaded - {bytesWritten * 100/(totalBytes)}%"
layoutInfo: LayoutInfo { vpos: VPos.CENTER maxWidth: 120 minWidth: 120 width: 120 height: 30 }
}
def jFileChooser = new javax.swing.JFileChooser();
jFileChooser.setApproveButtonText("Upload");
var button = Button {
text: "Upload"
layoutInfo: LayoutInfo { width: 100 height: 30 }
action: function() {
var outputFile = jFileChooser.showOpenDialog(null);
if (outputFile == javax.swing.JFileChooser.APPROVE_OPTION) {
uploadFile(jFileChooser.getSelectedFile());
}
}
}
var hBox = HBox {
spacing: 10
content: [label, button]
}
var progressBar = ProgressBar {
progress: bind progressUpload
layoutInfo: LayoutInfo { width: 240 height: 30 }
}
var vBox = VBox {
spacing: 10
content: [hBox, progressBar]
layoutX: 10
layoutY: 10
}
Stage {
title: "Upload File"
width: 270
height: 120
scene: Scene {
content: [vBox]
}
resizable: false
}