我正在开发一个Android应用程序,使用户能够将文件上传到Twitpic等服务.POST上传完成后没有任何外部库,工作正常.我唯一的问题是,我不能抓住任何进展,因为所有的上传是,当我完成接收不同时响应,写字节到输出流.这是我做的:
URL url = new URL(urlString);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
Run Code Online (Sandbox Code Playgroud)
然后我将表单数据写入dos,现在这里并不重要.之后我自己编写文件数据(从"in"读取,这是我要发送的数据的InputStream):
while ((bytesAvailable = in.available()) > 0)
{
bufferSize = Math.min(bytesAvailable, maxBufferSize);
byte[] buffer = new byte[bufferSize];
bytesRead = in.read(buffer, 0, bufferSize);
dos.write(buffer, 0, bytesRead);
}
Run Code Online (Sandbox Code Playgroud)
之后,我发送多部分表单数据以指示文件的结尾.然后,我关闭流:
in.close();
dos.flush();
dos.close();
Run Code Online (Sandbox Code Playgroud)
这一切都很好,到目前为止没问题.然而,我的问题是,无论文件有多大,到目前为止的整个过程大约需要一到两秒钟.当我阅读回复时,上传本身似乎发生了:
DataInputStream inStream = new DataInputStream(conn.getInputStream());
Run Code Online (Sandbox Code Playgroud)
这需要几秒钟或几分钟,具体取决于文件的大小和Internet连接的速度.我现在的问题是:1)当我将字节写入"dos"时,为什么不发生uplaod?2)如果一次发生所有事情,我怎样才能获取进度以便在上传过程中显示进度对话框?
/编辑:1)我在标题中设置了Content-Length,它稍微改变了问题,但没有以任何方式解决它:现在整个内容在最后一个字节写入流后上传.因此,这不会改变您无法获取进度的情况,因为同样,数据会立即写入.2)我在Apache HttpClient v4中尝试了MultipartEntity.在那里你根本没有OutputStream,因为在执行请求时会写入所有数据.再说一次,没有办法抓住进步.
有没有人有任何其他想法如何在多部分/表单上传中获取进程?
我正在尝试编写一个Python脚本来监视rsync传输,并提供(粗略)估计百分比进度.对于我的第一次尝试,我查看了一个rsync --progress命令,看到它打印的消息如下:
1614 100% 1.54MB/s 0:00:00 (xfer#5, to-check=4/10)
我为这样的消息编写了一个解析器,并使用to-check部分来产生一个百分比进度,在这里,这将完成60%.
但是,这有两个缺陷:
我已经看过要使用的其他消息替代方案,但还没有设法找到任何东西.有没有人有任何想法?
提前致谢!
我很清楚如何使用标签和简单的Javascript为音频播放器创建自定义搜索条.
现行代码:
<script>
function play() {
document.getElementById('player').play();
}
function pause() {
document.getElementById('player').pause();
}
</script>
<audio src="sample.mp3" id="player"></audio>
<button onClick="javascript:play()" >Play</button>
<button onClick="javascript:pause()" >Pause</button>
<progress id="seekbar"></progress>
Run Code Online (Sandbox Code Playgroud)
是否可以链接进度条,以便在播放歌曲时显示进度?
我正在使用带录音机和播放器的应用程序.我正在使用mediaplayer播放录制的.wav文件,同时我想更新到搜索栏.一切都工作正常但我的问题是媒体播放器进度更新到seekbar没有顺利发生,如果我们playig一个小文件,搜索栏的拇指在几秒钟或之间跳跃.
任何人都可以帮助我解决方法,使其顺利寻求seekbar的进展.我的代码如下所示.我被困在这里.
mediaPlayerIntiate();
mediaPlayerSetSource();
mMediaPlayer.start();
task = new TimerTask() {
@Override
public void run() {
Graphbar.post(new Runnable() {
@Override
public void run() {
if (mMediaPlayer != null) {
if (playButtonState == MediaMode.PLAY) {
if (mMediaPlayer.isPlaying()) {
Graphbar.setProgress(mMediaPlayer
.getCurrentPosition());
mediaPlayerUpdateTimer(mMediaPlayer
.getCurrentPosition());
enableRewindandForward();
}
}
}
}
});
}
};
timer = new Timer();
timer.schedule(task, 0, 8);
Run Code Online (Sandbox Code Playgroud) 当IProgress<T>用于报告进度时,它应该是
IProgress<T>要意识到进展报告的频率可能高于其提出这一进展的方式.问题的背景是我有一些IProgress<T>用于报告进度的代码,它以非常高的速度报告进展情况.我想用UI进度条显示进度.如果我使用提供的Progress<T>实现(将进度发布到UI SyncronizationContext),那么它会导致UI无响应(即,有很多消息发送到消息队列,用户甚至无法单击"取消"按钮在对话框上).
所以,
IProgress<T>实现只是将进度写入日志文件(并且可以处理高报告频率),那该怎么办呢?-要么-IProgress<T>实现来解决这个问题,该实现限制了我处理/报告进度的频率.据推测,此实现将记录非UI线程的最新进度,然后(可能)UI将基于计时器进行更新.我有一个进度条,我在许多迭代循环中更新.
https://jsfiddle.net/k29qy0do/32/ (在单击开始按钮之前打开控制台)
var progressbar = {};
$(function () {
progressbar = {
/** initial progress */
progress: 0,
/** maximum width of progressbar */
progress_max: 0,
/** The inner element of the progressbar (filled box). */
$progress_bar: $('#progressbar'),
/** Set the progressbar */
set: function (num) {
if (this.progress_max && num) {
this.progress = num / this.progress_max * 100;
console.log('percent: ' + this.progress + '% - ' + num + '/' + this.progress_max);
this.$progress_bar.width(String(this.progress) + '%');
}
},
fn_wrap: …Run Code Online (Sandbox Code Playgroud) 我有WPF应用程序,我写的是将文件发布到社交网络之一.上传本身工作得很好,但我想提供一些指示,说明我在上传方面有多远.
我尝试了很多方法来做到这一点:
1)HttpWebRequest.GetStream方法:
using (
var FS = File.Open(
localFilePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
long len = FS.Length;
HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url);
request.Method = "POST";
request.ProtocolVersion = HttpVersion.Version11;
request.ContentType = "multipart/form-data; boundary=--AaB03x";
//predata and postdata is two byte[] arrays, that contains
//strings for MIME file upload (defined above and is not important)
request.ContentLength = predata.Length + FS.Length + postdata.Length;
request.AllowWriteStreamBuffering = false;
using (var reqStream = request.GetRequestStream())
{
reqStream.Write(predata, 0, predata.Length);
int bytesRead = 0;
int totalRead = 0; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个充斥着异步任务的解析器.我使用JQuery promises来控制和排序异步任务.这是构造函数的伪代码版本:
/**
* @constructor
*/
function Parser(json)
{
return $.when(
this.delete().then(this.insert(json)),
this.doSomething(),
this.doSomethingElse().then(this.update(json))
)
};
Run Code Online (Sandbox Code Playgroud)
这是一个示例函数的样子:
Parser.prototype.doSomething = function()
{
var dfd = $.Deferred();
exampleTask(dfd.reject, dfd.resolve);
return dfd.promise();
};
Run Code Online (Sandbox Code Playgroud)
来自JQuery文档:
在将多个Deferred对象传递给jQuery.when的情况下,该方法从新的"master"Deferred对象返回Promise,该对象跟踪已传递的所有Deferred的聚合状态
如何使用.progress()通知任何关心Parser整体进度的人?例如
var parser = new Parser(json);
parser.progress(function(prog){console.log(prog});
Run Code Online (Sandbox Code Playgroud)
这是我想要做的事情的小提琴:http: //jsfiddle.net/ashanova/RjULA/2/
我正在寻找使用线性进度信息计算操作的ETA(IE:文件下载)的最佳方法.
让我们说我有以下方法被调用:
void ReportProgress(double position, double total)
{
...
}
Run Code Online (Sandbox Code Playgroud)
我有几个想法:
参考java.util.concurrent包和Future接口,我注意到(除非我弄错了)启动冗长任务并能够查询进度的能力仅来自SwingWorker实现类.
这引出了以下问题:
有没有办法,在非GUI,非Swing应用程序(映像控制台应用程序)中在后台启动冗长的任务,并允许其他线程检查进度?在我看来,没有理由将此功能限制在swing/GUI应用程序中.否则,我看到的唯一可用选项是通过ExecutorService :: submit返回Future对象.但是,基本Future接口不允许监视进度.
progress ×10
javascript ×3
android ×2
c# ×2
jquery ×2
async-await ×1
audio ×1
concurrency ×1
css ×1
file-upload ×1
future ×1
http ×1
java ×1
math ×1
media-player ×1
post ×1
python ×1
rsync ×1
seekbar ×1
smooth ×1
swingworker ×1
upload ×1