<div class="post-topheader__info" data-username="13678398293" data-userslug="13678398293" data-useravatar="https://avatar-static.segmentfault.com/186/821/1868219188-5b6d90c6b4a48_big64">
<div class="article__author clearfix">
<div class="article__authorleft">
<a href="/u/13678398293">
<img class="avatar-40" src="https://avatar-static.segmentfault.com/186/821/1868219188-5b6d90c6b4a48_big64" alt="13678398293">
</a>
</div>
<div class="article__authorright">
<div class="article__authormeta">
<a href="/u/13678398293" class="mr5 "><strong>13678398293</strong></a>
<img src="https://static.segmentfault.com/v-5c498373/global/img/rp.svg" class="mr5"><span style="color:#BF7158" class="mr10">3</span>
<span class="hidden-xs">
<button type="button" class="btn btn-xs btn-success follow-user" data-do="follow" data-type="user" data-id="1030000015959163">关注作者
</button>
</span>
</div>
<span style="display: block">
2018-09-21 发布
</span>
</div>
</div>
<h1 class="h1 post-topheader__info--title" id="articleTitle" data-id="1190000016488521">
<a href="/a/1190000016488521"> 怎么用Java从网上下载一个视频下来</a>
</h1>
<div class="content__tech hidden-xs">
<a href="" class="blog-type-common blog-type-1-before" target="_blank" data-content="
原创
"></a>
<ul class="taglist--inline inline-block article__title--tag mr10">
<li class="tagPopup mb5">
<a class="tag" href="/t/java/blogs" data-toggle="popover" data-img="https://avatar-static.segmentfault.com/512/342/51234253-1040000000089449_big64" data-placement="top" data-original-title="java" data-id="1040000000089449">
<img src="https://avatar-static.segmentfault.com/868/271/868271510-54cb382abb7a1_small">
java
</a>
</li>
</ul>
<span>
510 次阅读
·
读完需要 18 分钟
</span>
</div>
</div>
</div>
</div>
</div>
</div>
</div><!-- end .post-topheader -->
<div class="visible-lg">
<div class="side-widget">
<div class="stream__item-zan btn btn-default mt0 mb15 ml0 mr0 pt0 pb0 pl0 pr0 " id="side-widget-votes-btn">
<span class="stream__item-zan-icon"></span>
<span class="stream__item-zan-number" id="side-widget-votes-num">1</span>
</div>
<i class="fa fa-bookmark item " id="side-widget-bookmarks-btn"></i>
<i class="fa fa-weibo item"></i>
<i class="fa fa-weixin item" data-toggle="popover" data-placement="right" data-original-title="" title=""></i>
<i class="fa fa-twitter item"></i>
<i class="fa fa-facebook item"></i>
<i class="fa fa-arrow-up item hidden"></i>
</div>
</div>
<div class="article fmt article__content" data-id="1190000016488521" data-license="">
用Java的IO流从网上下载一个视频
原理:就是用URL对象与目标地址建立一个链接,用IO流的方式从这个链接上把视频的二进制数据读取下载然后再写入本地文件。
因为小弟比较菜的缘故,不会下载那些加了密的视频链接,这里我就找了一个没有假面的url来做测试:http://aqiniu.tangdou.com/C79...
代码思路
- 先建立一个链接对象,获取到网页的链接;
- 从链接对象获取到输入流,读取数据;
- 建立一个输出流,向本地文件写入数据。
代码实现
获取链接对象
public class download {
//定义一个HttpURLConnection在外面,因为要在finally中关闭
HttpURLConnection connection = null;
public static void main(String[] args) {
try {
//获取链接对象
URL url = new URL(videoUrl);
HttpURLConnection connection = url.openConnection();
connection.setRequestProperty("Range","bytes=0-");
connection.connect();
if(connection.getResponseCode() / 100 != 2){
System.out.println("链接资源失败...");
return;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} finally {
HttpURLConnection.disconnect();
}
}
}
好了,现在来讲一下上面的代码的作用:
1.URL url = new URL(videoUrl);
就是获取URL的资源对象,传入的字符串就是对应的地址;
2.HttpURLConnection connection = url.openConnection();
是获取链接对象,就是靠这个对象来获取流;
3.connection.setRequestProperty("Range","bytes=0-");
Range代表读取的范围,bytes=0-代表从0字节到最大字节,意味着读取所有资源
4.connection.connect();
与网页建立李链接,链接成功后就可以获得流;
5.connection.getResponseCode() / 100 != 2
这一个判断代表的是,如果建立链接返回的相应代码是200到300间就为成功,否则链接失败
获取流实现:
InputStream inputStream = connection.getInputStream();
获取流只需要一行代码,从连接对象直接get。
实现文件的写入:这里采用的是RandomAccessFile这个的对象。
String fileName = url.getFile();
fileName = fileName.substring(fileName.lastIndexOf("/")+1);
RandomAccessFile randomAccessFile = new RandomAccessFile(fileName,"rw");
1.第一行代码是获取文件名称,这里说明一下,根据这个url来看,我们获取的fileName是/C79EBFF6107CE4389C33DC5901307461-20.mp4,意思是getFile获取的是.com后面的路径,所以我这里用截取字符串的方式来把文件名获取了,当然也可以自己设置随机的文件名
2.字符串截取
3.建立文件写入对象
下面贴出完整的实现代码:
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class DownloadVideo {
private static String videoUrl = "http://aqiniu.tangdou.com/C79EBFF6107CE4389C33DC5901307461-20.mp4";
private static final int MAX_BUFFER_SIZE = 1000000;
public static void main(String[] args) {
HttpURLConnection connection = null;
InputStream inputStream = null;
RandomAccessFile randomAccessFile = null;
try {
// 1.获取连接对象
URL url = new URL(videoUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Range", "bytes=0-");
connection.connect();
if(connection.getResponseCode() / 100 != 2) {
System.out.println("连接失败...");
return;
}
// 2.获取连接对象的流
inputStream = connection.getInputStream();
//已下载的大小
int downloaded = 0;
//总文件的大小
int fileSize = connection.getContentLength();
String fileName = url.getFile();
fileName = fileName.substring(fileName.lastIndexOf("/") + 1);
// 3.把资源写入文件
randomAccessFile = new RandomAccessFile(fileName,"rw");
while(downloaded < fileSize) {
// 3.1设置缓存流的大小
byte[] buffer = null;
if(fileSize - downloaded >= MAX_BUFFER_SIZE) {
buffer = new byte[MAX_BUFFER_SIZE];
}else {
buffer = new byte[fileSize - downloaded];
}
// 3.2把每一次缓存的数据写入文件
int read = -1;
int currentDownload = 0;
long startTime = System.currentTimeMillis();
while(currentDownload < buffer.length) {
read = inputStream.read();
buffer[currentDownload ++] = (byte) read;
}
long endTime = System.currentTimeMillis();
double speed = 0.0;
if(endTime - startTime > 0) {
speed = currentDownload / 1024.0 / ((double)(endTime - startTime)/1000);
}
randomAccessFile.write(buffer);
downloaded += currentDownload;
randomAccessFile.seek(downloaded);
System.out.printf("下载了进度:%.2f%%,下载速度:%.1fkb/s(%.1fM/s)%n",downloaded * 1.0 / fileSize * 10000 / 100,speed,speed/1000);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
connection.disconnect();
inputStream.close();
randomAccessFile.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void demo() {
try {
URL url = new URL(videoUrl);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
" title="" data-original-title=“复制”>
package download;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class DownloadVideo {
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> String videoUrl = <span class="hljs-string">"http://aqiniu.tangdou.com/C79EBFF6107CE4389C33DC5901307461-20.mp4"</span>;
<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">int</span> MAX_BUFFER_SIZE = <span class="hljs-number">1000000</span>;
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> main(String[] args) {
HttpURLConnection connection = <span class="hljs-literal">null</span>;
InputStream inputStream = <span class="hljs-literal">null</span>;
RandomAccessFile randomAccessFile = <span class="hljs-literal">null</span>;
<span class="hljs-keyword">try</span> {
<span class="hljs-comment">// 1.获取连接对象</span>
URL url = <span class="hljs-keyword">new</span> URL(videoUrl);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty(<span class="hljs-string">"Range"</span>, <span class="hljs-string">"bytes=0-"</span>);
connection.connect();
<span class="hljs-keyword">if</span>(connection.getResponseCode() / <span class="hljs-number">100</span> != <span class="hljs-number">2</span>) {
System.out.println(<span class="hljs-string">"连接失败..."</span>);
<span class="hljs-keyword">return</span>;
}
<span class="hljs-comment">// 2.获取连接对象的流</span>
inputStream = connection.getInputStream();
<span class="hljs-comment">//已下载的大小</span>
<span class="hljs-keyword">int</span> downloaded = <span class="hljs-number">0</span>;
<span class="hljs-comment">//总文件的大小</span>
<span class="hljs-keyword">int</span> fileSize = connection.getContentLength();
String fileName = url.getFile();
fileName = fileName.substring(fileName.lastIndexOf(<span class="hljs-string">"/"</span>) + <span class="hljs-number">1</span>);
<span class="hljs-comment">// 3.把资源写入文件</span>
randomAccessFile = <span class="hljs-keyword">new</span> RandomAccessFile(fileName,<span class="hljs-string">"rw"</span>);
<span class="hljs-keyword">while</span>(downloaded < fileSize) {
<span class="hljs-comment">// 3.1设置缓存流的大小</span>
<span class="hljs-keyword">byte</span>[] buffer = <span class="hljs-literal">null</span>;
<span class="hljs-keyword">if</span>(fileSize - downloaded >= MAX_BUFFER_SIZE) {
buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[MAX_BUFFER_SIZE];
}<span class="hljs-keyword">else</span> {
buffer = <span class="hljs-keyword">new</span> <span class="hljs-keyword">byte</span>[fileSize - downloaded];
}
<span class="hljs-comment">// 3.2把每一次缓存的数据写入文件</span>
<span class="hljs-keyword">int</span> read = <span class="hljs-number">-1</span>;
<span class="hljs-keyword">int</span> currentDownload = <span class="hljs-number">0</span>;
<span class="hljs-keyword">long</span> startTime = System.currentTimeMillis();
<span class="hljs-keyword">while</span>(currentDownload < buffer.length) {
read = inputStream.read();
buffer[currentDownload ++] = (<span class="hljs-keyword">byte</span>) read;
}
<span class="hljs-keyword">long</span> endTime = System.currentTimeMillis();
<span class="hljs-keyword">double</span> speed = <span class="hljs-number">0.0</span>;
<span class="hljs-keyword">if</span>(endTime - startTime > <span class="hljs-number">0</span>) {
speed = currentDownload <span class="hljs-regexp">/ 1024.0 /</span> ((<span class="hljs-keyword">double</span>)(endTime - startTime)/<span class="hljs-number">1000</span>);
}
randomAccessFile.write(buffer);
downloaded += currentDownload;
randomAccessFile.seek(downloaded);
System.out.printf(<span class="hljs-string">"下载了进度:%.2f%%,下载速度:%.1fkb/s(%.1fM/s)%n"</span>,downloaded * <span class="hljs-number">1.0</span> <span class="hljs-regexp">/ fileSize * 10000 /</span> <span class="hljs-number">100</span>,speed,speed/<span class="hljs-number">1000</span>);
}
} <span class="hljs-keyword">catch</span> (MalformedURLException e) {
e.printStackTrace();
} <span class="hljs-keyword">catch</span> (IOException e) {
e.printStackTrace();
}<span class="hljs-keyword">finally</span> {
<span class="hljs-keyword">try</span> {
connection.disconnect();
inputStream.close();
randomAccessFile.close();
} <span class="hljs-keyword">catch</span> (IOException e) {
e.printStackTrace();
}
}
}
<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> demo() {
<span class="hljs-keyword">try</span> {
URL url = <span class="hljs-keyword">new</span> URL(videoUrl);
} <span class="hljs-keyword">catch</span> (MalformedURLException e) {
<span class="hljs-comment">// TODO Auto-generated catch block</span>
e.printStackTrace();
}
}
}
这里在补充说明上面的代码,MAX_BUFFER_SIZE是我设置的缓存大小,在注释3.1那里判断当前剩余的下载大小是否大于缓存之,如果不大于就把缓存的大小设为剩余的。
while(currentDownload < buffer.length) {
read = inputStream.read();
buffer[currentDownload ++] = (byte) read;
}
这段代码是按照缓存的大小,读写该大小的字节。然后循环依次写入缓存的大小,直至结束。
这样的优势在于,不用让硬件频繁的写入,可以提高效率和保护硬盘吧
控制台输出结果:
下载了进度:11.59%,下载速度:388.0kb/s(0.4M/s)
下载了进度:23.19%,下载速度:262.5kb/s(0.3M/s)
下载了进度:34.78%,下载速度:261.0kb/s(0.3M/s)
下载了进度:46.38%,下载速度:258.3kb/s(0.3M/s)
下载了进度:57.97%,下载速度:260.0kb/s(0.3M/s)
下载了进度:69.57%,下载速度:260.9kb/s(0.3M/s)
下载了进度:81.16%,下载速度:257.4kb/s(0.3M/s)
下载了进度:92.75%,下载速度:252.3kb/s(0.3M/s)
下载了进度:100.00%,下载速度:286.5kb/s(0.3M/s)
好了,以上就是下载视频的简单实现,小弟也是刚学的,可能有许多地方不是很好,请不吝指教。
</div>
<div class="clearfix mt10">
<ul class="article-operation list-inline pull-left mt15"><li><a target="_blank" href="https://creativecommons.org/licenses/by-nc-nd/4.0/"><img class="mb5" src="https://static.segmentfault.com/v-5c498373/global/img/creativecommons-cc.svg" height="20"></a></li><li class="dropdown js__content-ops hidden-xs" data-module="article" data-id="1190000016488521" data-typetext="文章"><a href="javascript:void(0);" class="dropdown-toggle text-muted" data-toggle="dropdown"><i class="fa fa-ellipsis-h" aria-hidden="true"></i></a><ul class="dropdown-menu dropdown-menu-left"><li><a href="#911" data-toggle="modal" data-target="#911" data-action="report">举报</a></li></ul></li></ul>
<div class="pull-right mt-10 hidden-xs">
<div class="widget-share__full" data-text="怎么用Java从网上下载一个视频下来" data-url="https://segmentfault.com/a/1190000016488521" data-shorturl="http://sfau.lt/b5bhlz3"><div class="widget-share-network sharer-0" style="display: block;"><ul class="sn-inline"><li data-network="weibo"><a href="javascript:void(0);" class="entypo-weibo icon-sn-weibo share-1" data-toggle="tooltip" data-placement="top" title="" data-original-title="分享至新浪微博">新浪微博</a></li><li data-network="wechart"><a href="javascript:void(0);" class="entypo-wechart icon-sn-weixin share-2" data-toggle="tooltip" data-placement="top" title="" data-original-title="分享至微信">微信</a></li><li data-network="twitter"><a href="javascript:void(0);" class="entypo-twitter icon-sn-twitter share-3" data-toggle="tooltip" data-placement="top" title="" data-original-title="分享至 Twitter">Twitter</a></li><li data-network="facebook"><a href="javascript:void(0);" class="entypo-facebook icon-sn-facebook share-4" data-toggle="tooltip" data-placement="top" title="" data-original-title="分享至 Facebook">Facebook</a></li></ul></div><a type="button" class="btn btn-sm shareMore btn-sn-more" data-toggle="popover" data-placement="top" data-url="https://segmentfault.com/a/1190000016488521" data-shorturl="http://sfau.lt/b5bhlz3"><span class="icon-sn-dotted" data-original-title="" title=""></span><strong class="visible-xs-inline">•••</strong></a></div>
</div>
</div>
<div class="mt10 text-center mb30"><button type="button" id="mainLike" data-id="1190000016488521" class="btn btn-success btn-lg mr15 "><span id="mainLikeText">赞</span> <span class="seprator">|</span>
<span id="mainLikeNum">1 </span></button><button type="button" id="mainBookmark" data-type="article" data-id="1190000016488521" class="btn btn-default btn-lg "><span id="mainBookmarkText">收藏</span> <span class="seprator">|</span> <span id="mainBookmarkNum">0</span></button></div>
<script type="text/javascript">
OA_show(3);
</script><div style="text-align: center; line-height: 0; background: #EEE"><script async="" src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的</h4>
<div class="mb15 block">
<script type="text/javascript">
OA_show(4);
</script><div id="beacon_bb388b24c6" style="position: absolute; left: 0px; top: 0px; visibility: hidden;"><img src="https://sponsor.segmentfault.com/lg.php?bannerid=0&campaignid=0&zoneid=4&loc=https%3A%2F%2Fsegmentfault.com%2Fa%2F1190000016488521&referer=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3DMzwD-n9qIHJ6X5w3hP3Eh4DCHSwF-y05eq92IlBnWRwDaVshbi2aRn_hq45xU3YLTndFf6k8By6mhW51DbVA4_%26wd%3D%26eqid%3De626529a000698c3000000025c499f76&cb=bb388b24c6" width="0" height="0" alt="" style="width: 0px; height: 0px;"></div>
</div>
<div id="paradigm-article-related"><div class="recommend-post mb30"><ul class="widget-links"><li><a href="http://segmentfault.com/a/1190000009265613" title="java的线程、锁相关" target="_blank">java的线程、锁相关</a><span class="text-muted">方老司</span><a class="tag" taget="_blank" href="/t/java">java</a></li><li><a href="http://segmentfault.com/a/1190000002558548" title="Equinox MANIFEST.MF 中文处理 Bug" target="_blank">Equinox MANIFEST.MF 中文处理 Bug</a><span class="text-muted">khotyn</span><a class="tag" taget="_blank" href="/t/equinox">equinox</a><a class="tag" taget="_blank" href="/t/eclipse">eclipse</a><a class="tag" taget="_blank" href="/t/java">java</a></li><li><a href="http://segmentfault.com/a/1190000015723744" title="Java 8之stream介绍和使用" target="_blank">Java 8之stream介绍和使用</a><span class="text-muted">Half</span><a class="tag" taget="_blank" href="/t/java">java</a></li><li><a href="http://segmentfault.com/a/1190000015441609" title="Java 8之方法引用和Lambda表达式" target="_blank">Java 8之方法引用和Lambda表达式</a><span class="text-muted">Half</span><a class="tag" taget="_blank" href="/t/java">java</a></li><li><a href="http://segmentfault.com/a/1190000015467071" title="从零开始实现一个简易的Java MVC框架--实现Bean容器" target="_blank">从零开始实现一个简易的Java MVC框架--实现Bean容器</a><span class="text-muted">zzzzbw</span><a class="tag" taget="_blank" href="/t/java">java</a><a class="tag" taget="_blank" href="/t/spring">spring</a><a class="tag" taget="_blank" href="/t/spring-boot">spring-boot</a><a class="tag" taget="_blank" href="/t/ioc">ioc</a><a class="tag" taget="_blank" href="/t/aop">aop</a></li><li><a href="http://segmentfault.com/a/1190000011284890" title="单元测试" target="_blank">单元测试</a><span class="text-muted">liutxer</span><a class="tag" taget="_blank" href="/t/java">java</a><a class="tag" taget="_blank" href="/t/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95">单元测试</a></li><li><a href="http://segmentfault.com/a/1190000004701906" title="假如时光倒流,我会这么学习Java" target="_blank">假如时光倒流,我会这么学习Java</a><span class="text-muted">码农老刘</span><a class="tag" taget="_blank" href="/t/java-se">java-se</a><a class="tag" taget="_blank" href="/t/java-ee">java-ee</a><a class="tag" taget="_blank" href="/t/java">java</a></li><li><a href="http://segmentfault.com/a/1190000008574450" title="Hello World -- Java Web版(Java Web 入门教程)" target="_blank">Hello World -- Java Web版(Java Web 入门教程)</a><span class="text-muted">Luckyqiao</span><a class="tag" taget="_blank" href="/t/java">java</a><a class="tag" taget="_blank" href="/t/java-web">java-web</a><a class="tag" taget="_blank" href="/t/java-ee">java-ee</a></li></ul></div></div>
<div class="comments--news comments--default comments--article
" data-id="1190000016488521" data-user-id="" data-author-id="1030000015959163 " data-is-admin="null" id="goToReplyArea">
<div class="mb10 clearfix">
<strong class="comments-stat pull-left mr10">2 条评论</strong>
<div class="btn-group btn-group-xs pull-right comments-sort btn-group-menu" role="menu">
<a href="javascript:;" class="btn btn-default active" data-sort="default">默认排序</a>
<a href="javascript:;" class="btn btn-default" data-sort="desc">时间排序</a>
</div>
</div>
<div class="comments-container">
<div class="comments-list">
<div class="comments-item" data-id="1050000016780023">
<div class="pull-left">
<a href="/u/ajax_5bcf2178d3225" target="_blank"><img class="avatar-32 " src="https://static.segmentfault.com/v-5c498373/global/img/user-64.png" alt=""></a>
</div>
<div class="comments-content">
<div class="comment-trigger">
<div class="pull-right comment-option">
<a href="#911" class="ml10" data-toggle="modal" data-target="#911" data-action="report" data-action-text="举报" data-module="comment" data-id="1050000016780023" data-typetext="评论" data-placement="top" title="举报"><span class="glyphicon glyphicon-flag" aria-hidden="true"></span></a>
</div>
<strong><a target="_blank" href="/u/ajax_5bcf2178d3225">Ajax</a></strong>
<span class="comments-isAuthor hide"></span>
<span class="comments-date"> · 2018年10月23日</span>
</div>
<div class="fmt mb10"><p>下载到哪里了啊</p></div>
<form action="/api/comment/1050000016780023/edit">
<div class="form-group">
<textarea class="editTextarea mono form-control mb10 hidden" rows="1" name="text" style="height: 28px; overflow: hidden; word-wrap: break-word;">下载到哪里了啊</textarea>
</div>
</form>
<p class="comment-ops not-reply">
<span class="comments-zan ">
<i class="fa fa-thumbs-up mr4" aria-hidden="true"></i>
<span class="comments-zan-text">赞</span>
<span class="comments-zan-value"></span>
</span>
<span class="ml15 comments-reply-btn">回复</span>
<span class="pull-right editBtns hidden">
<button class="btn btn-link btn-xs cancel" type="button">取消</button>
<button class="btn btn-primary btn-xs edit ml10" type="button">保存</button>
</span>
</p>
<div class="reply-list ">
<div class="reply-item" data-id="1050000016793840">
<span class="pull-left comment-ops " style="position:absolute;">
<span class="mr20 comments-zan ">
<span class="comments-zan-value comment-showhide
islike0-10
">
0
</span>
<i class="fa fa-thumbs-up comment-showhide ml5" aria-hidden="true"></i>
</span>
</span>
<div class="reply-content-block">
<div class="reply-content"><p>你看看是不是在java文件的那个目录。</p></div>
<form action="/api/comment/1050000016793840/edit">
<div class="form-group">
<textarea class="editTextarea mono form-control mb10 hidden" rows="1" name="text" style="height: 28px; overflow: hidden; word-wrap: break-word;">你看看是不是在java文件的那个目录。</textarea>
</div>
</form>
<div class="comment-func inline-block">
<span class="pull-right commentTools ml15">
<a href="#911" class="ml10" data-toggle="modal" data-target="#911" data-module="comment" data-id="1050000016793840" data-action="report" data-typetext="评论" data-placement="top" title="举报">
<span class="glyphicon glyphicon-flag" aria-hidden="true"></span>
</a>
</span>
<span class="comment-meta inline-block">
<span> — </span>
<a target="_blank" href="/u/13678398293">
<strong>13678398293</strong>
</a>
<span class="comments-isAuthor ">
作者
</span>
<span class="text-muted-plus"> · 2018年10月24日</span>
</span>
</div>
</div>
</div>
<div class="reply-item reply-item--ops" data-obj="obj">
<a class="reply-inner-btn" href="javascript:;">添加回复</a>
</div>
</div>
</div>
</div>
</div>
<div class="comments-loading hide">载入中...</div>
<div class="comments-more hide"><a href="javascript:;">显示更多评论</a></div>
<div class="comments-box" id="goToReplyEditor">
<div class="pull-left">
<img class="avatar-32 " src="https://static.segmentfault.com/v-5c498373/global/img/user-128.png" alt="">
</div>
<div class="comments-box-content">
<form action="/api/article/1190000016488521/comments/add">
<div class="form-group mb0">
<textarea name="text" rows="3" class="form-control" placeholder="文明社会,理性评论"></textarea>
<div class="mt15 text-right">
<button type="button" class="hide"></button>
<button class=" btn btn-primary" type="button">发布评论</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>