Java 使用HttpClient上载大型文件

Java 使用HttpClient上载大型文件,java,Java,我想用HttpClient将大型视频文件(>=1Gb)上传到servlet,但我找不到任何真实的示例。 你能给我一些有用的代码示例吗 我希望看到HttpClient和FileUpload演示代码(作为一个项目)。这很有趣,我可以使用FileUpload lib下载大文件吗 将上载绑定为applet->servlet是很有趣的,下面是一个HttpClient和文件上载的示例: 我不确定你说的“真实”是什么意思。这是真实的,即使它不完全符合你的情况 1GB?您可能存在文件大小限制问题。在本地试

我想用
HttpClient
将大型视频文件(>=1Gb)上传到servlet,但我找不到任何真实的示例。 你能给我一些有用的代码示例吗


我希望看到HttpClient和FileUpload演示代码(作为一个项目)。这很有趣,我可以使用FileUpload lib下载大文件吗



将上载绑定为applet->servlet是很有趣的,下面是一个HttpClient和文件上载的示例:

我不确定你说的“真实”是什么意思。这是真实的,即使它不完全符合你的情况


1GB?您可能存在文件大小限制问题。在本地试试看。如果失败了,至少你可以在这里发布一些真实的代码和更精确的条件。

我可以上传大于200mb的大文件,请查看下面jsp到spring控制器的代码

Jsp code :
<script src="../lib/app/configurator.data.ajax.js" type="text/javascript"></script>
<script src="../lib/ui/jquery.fileupload.js"></script>
<html>

<script language="Javascript">
var varb = '';
var test = 0;
var count = 1;
$(function () {
var maxChunkSize = 30000000; //SET CHUNK SIZE HERE
var your_global_var_for_form_submit = '';

var params = {
        year: threeDSelectedYear,
        series: threeDSelectedSeries
};
/*File upload bind with form, 'fileupload' is my form id. As sumit triggers
    for file ulaod will submit my form*/
/* replaceFileInput: true, */
$('#fileupload').fileupload({
maxChunkSize: maxChunkSize,
url: efccustom.getEfcContext()+'upload/uploadZip?year='+threeDSelectedYear+'&series='+threeDSelectedSeries,             //URL WHERE FILE TO BE UPLOADED
    error: function (jqXHR, textStatus, errorThrown) {
    // Called for each failed chunk upload
        $(".fileupload-loading").html("");
         $('.ANALYZE_DIALOG').dialog("close");       
    },

    success: function (data, textStatus, jqXHR) {
    /*This event will be called on success of upload*/
    count = parseInt($('#counter').val()) + 1;
    $('#counter').val(count);

    $('#ttk').val(count);
    data.ttk = 7;
    console.log(" count ",count , data);
    },

    submit: function (e, data) {
    /*This event will be called on submit here i am
                     adding variable to form*/
    //console.log($('#zip_uploaded_file').val());      

    //console.log(data.originalFiles[0].name);            
    test = data.originalFiles[0];
    $('#fname').val(data.originalFiles[0].name);
    $('#trequests').val(Math.ceil(data.originalFiles[0].size/maxChunkSize));
    $('#counter').val('1');
    },

    progress: function (e, data) {
    /*PROGRESS BAR CODE WILL BE HERE */
        $(".fileupload-loading").html('<img src="../public/themeroller/images/throbber.gif" alt="Uploading Please Wait..." title="Uploading Please Wait...." />');       
    },

    add: function (e, data) {
    $('.browsedFileName').html(data.originalFiles[0].name);
    your_global_var_for_form_submit = data;
    },

    done: function (e, data) {

        ajaxcall.Data._get('upload/extractZipNCreateJson',params,function(data2) {
            alert("file upload success ");
             $(".fileupload-loading").html("");
             $('.ANALYZE_DIALOG').dialog("close");
        });


    }

});
/*This is my button click event on which i am submitting my form*/
  $('#button').click(function(){
    your_global_var_for_form_submit.submit();
  });
});
</script>

<html>

<body>


<form id="fileupload" enctype="multipart/form-data"> 
<div class="row fileupload-buttonbar">
<div class="span7">
<!--<input type="file" name="files" id="file" /> -->

<input type="file" id="zip_uploaded_file"  name="zip_uploaded_file"  />
<input type="hidden" name="counter" id="counter" value="1" />
<input type="hidden" name="fname" id="fname" value="" />
<input type="hidden" name="trequests" id="trequests" value="1" />

<input type="hidden" name="ttk" id="ttk" value="1" />
<input type="button" id="button" name="button" value="submit" />
 <span class='browsedFileName'></span>
</div>
</div>
<!-- The loading indicator is shown during file processing -->
<div class="fileupload-loading"></div>
</form>
</body>


Controller COde :
@RequestMapping(value = "/uploadZip", method = RequestMethod.POST, consumes = "multipart/form-data")
    @ResponseBody
    public ResponseEntity<String>
     uploadZip(HttpServletRequest request, HttpServletResponse response)
            throws IOException, IllegalArgumentException {
        try {       
        String year = request.getParameter("year");
        String series = request.getParameter("series");
        log.info(" year " + year + " series " + series);
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (isMultipart) {

            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            List items = upload.parseRequest(request);
            Iterator iterator = items.iterator();

            HttpSession session = request.getSession();
            UserContext userContext = (UserContext) session
                    .getAttribute(ApplicationConstant.USER_CONTEXT);
            String userName = userContext.getUser();
            String workSpaceInUse = userContext.getCurrentWorkSpace();           
            FileItem item = null;
            boolean fileNotExistFlag;
            String fileExtension;
            while (iterator.hasNext()) {
                item = (FileItem) iterator.next();

                String content = item.getContentType();
                log.info(" content "+content);
                log.info(" File Type Getting Uploaded :"+content);
                if (!item.isFormField()) {
            /* Here in IOUtils the Third Parameter true tells that the small chunks of data that comes need to be added to the same File */
            IOUtils.copy(fileItem.getInputStream(), new FileOutputStream(new File(threeDPath+"/"+year+"/"+series+"/"+uploadZipFileName),true));               
                }
            }
            return null;
        }   
        }
        catch(Exception e) {
            return handleError(new RuntimeException("Unexpected error while uploading ZIP", e));
        }
        return null;
    }
Jsp代码:
var varb='';
var检验=0;
var计数=1;
$(函数(){
var maxChunkSize=30000000;//在此处设置块大小
var your_global_var_for_form_submit='';
变量参数={
年份:三个选定年份,
系列:三选系列
};
/*文件上载与表单绑定,'fileupload'是我的表单id。由sumit触发
乌洛德将提交我的表格存档*/
/*replaceFileInput:true*/
$('#fileupload')。fileupload({
maxChunkSize:maxChunkSize,
url:efccustom.getEfcContext()+'upload/uploadZip?year='+threeDSelectedYear+'&series='+threeDSelectedSeries,//要上载文件的url
错误:函数(jqXHR、textStatus、errorshown){
//为每个失败的区块上载调用
$(“.fileupload加载”).html(“”);
$('.ANALYZE_DIALOG')。对话框(“关闭”);
},
成功:函数(数据、文本状态、jqXHR){
/*上传成功后将调用此事件*/
count=parseInt($('#counter').val())+1;
$('计数器').val(计数);
$('#ttk').val(计数);
data.ttk=7;
console.log(“计数”,计数,数据);
},
提交:功能(e、数据){
/*本次活动将于我在此提交时召开
向窗体中添加变量*/
//console.log($('#zip_上传的_文件').val());
//console.log(data.originalFiles[0].name);
测试=数据原始文件[0];
$('#fname').val(data.originalFiles[0].name);
$('#trequests').val(Math.ceil(data.originalFiles[0].size/maxChunkSize));
$('计数器').val('1');
},
进度:功能(e、数据){
/*进度条码将显示在这里*/
$(“.fileupload loading”).html(“”);
},
添加:功能(e、数据){
$('.browsedFileName').html(data.originalFiles[0].name);
您的\u全局\u var\u for\u form\u submit=数据;
},
完成:功能(e,数据){
ajaxcall.Data.\u get('upload/extractZipNCreateJson',参数,函数(data2){
警报(“文件上传成功”);
$(“.fileupload加载”).html(“”);
$('.ANALYZE_DIALOG')。对话框(“关闭”);
});
}
});
/*这是我提交表单的按钮点击事件*/
$(“#按钮”)。单击(函数(){
您的表单提交的全局变量提交。提交();
});
});
控制器代码:
@RequestMapping(value=“/uploadZip”,method=RequestMethod.POST,consumes=“多部分/表单数据”)
@应答器
公共责任
uploadZip(HttpServletRequest请求,HttpServletResponse响应)
抛出IOException、IllegalArgumentException{
试试{
字符串year=request.getParameter(“年”);
字符串系列=request.getParameter(“系列”);
日志信息(“年”+年+“系列”+系列);
布尔值isMultipart=ServletFileUpload.isMultipartContent(请求);
if(isMultipart){
FileItemFactory=new DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
列表项=upload.parseRequest(请求);
迭代器迭代器=items.Iterator();
HttpSession session=request.getSession();
UserContext UserContext=(UserContext)会话
.getAttribute(ApplicationConstant.USER\u上下文);
字符串userName=userContext.getUser();
字符串workSpaceInUse=userContext.getCurrentWorkSpace();
FileItem=null;
布尔fileNotExistFlag;
字符串文件扩展名;
while(iterator.hasNext()){
item=(FileItem)迭代器.next();
字符串内容=item.getContentType();
日志信息(“内容”+内容);
log.info(“上传的文件类型:+内容”);
如果(!item.isFormField()){
/*在IOUtils中,第三个参数true告诉我们需要将小数据块添加到同一个文件中*/
copy(fileItem.getInputStream(),新的FileOutputStream(新文件(threeDPath+“/”+year+“/”+series+“/”+uploadZipFileName),true);
}
}
返回null;
}   
}
捕获(例外e){
返回handleError(新的运行时异常(“上载ZIP时出现意外错误”),e);
}
返回null;
}

谢谢您这么快的回复,我找到了清单9-6中的示例。HttpMultiPartFileUpload.javaIt很有趣,但我没有看到任何关于块或缓冲区的提到?所以HttpClient没有HttpUrlConnection最大块大小限制?我找不到任何文件上传示例:(所以我想看看客户端和servlet示例代码。。。