httphandler java_java – 使用HTTPHandler上传文件

我正在尝试使用HTTPHandler上传文件(多部分表单数据).

WebKit Boundary正在写入目标文件,从而破坏文件.

输入文件可以是任何类型的文件,包括文本,zip,apk等.

码:

public void handle(HttpExchange httpExchange) throws IOException {

URI uri = httpExchange.getRequestURI();

String httpReqMethod = httpExchange.getRequestMethod();

Headers headers = httpExchange.getRequestHeaders();

InputStream inputStrm = null;

FileOutputStream destFile = null;

String contentType = ((headers.get("Content-type") != null) ? (headers.get("Content-type").toString()) : (null));

httpExchange.getRequestURI().getQuery());

Map queryParams = queryToMap(httpExchange.getRequestURI().getQuery());

Set keys= headers.keySet();

Iterator itr = keys.iterator();

while(itr.hasNext())

{

String key = (String)itr.next();

}

File file = new File(ACEConstants.WEB_SERVER_CTX_ROOT + uri.getPath()).getCanonicalFile();

String resource = uri.getPath().substring(

uri.getPath().indexOf(ACEConstants.WEB_SERVER_CTX_ROOT)+ACEConstants.WEB_SERVER_CTX_ROOT.length()+1);

if(httpReqMethod.equals(ACEConstants.HTTP_REQUEST_METHOD_POST) )

{

if(contentType != null && contentType.contains("multipart/form-data"))

{

if(resource.equals("fileUpload"))

{

inputStrm = httpExchange.getRequestBody();

destFile = new FileOutputStream(new File("D:\\"+queryParams.get("fileName")));

String contentLength = headers.get("Content-length").toString();

long fileSize = (Long.parseLong(contentLength.substring(1, contentLength.length()-1)));

int iteration = 1;

long bytesToBeRead = (fileSize > 1024) ? ((iteration * 1024)) : (inputStrm.available());

long bytesRemaining = (fileSize) - (iteration * 1024);

byte[] bytes = new byte[1024];

if(fileSize <= 1024)

{

bytes = new byte[inputStrm.available()];

inputStrm.read(bytes);

destFile.write(bytes);

}

else {

while (inputStrm.read(bytes) != -1) {

iteration++;

destFile.write(bytes);

bytesRemaining = ( fileSize - ((iteration-1) * 1024));

if (bytesRemaining >= 1024) {

bytesToBeRead = 1024;

bytes = new byte[1024];

}

else {

bytes = new byte[inputStrm.available()];

inputStrm.read(bytes);

destFile.write(bytes);

break;

}

}

}

destFile.close();

}

}

}

}

这是HTML代码

function processForm(frm)

{

var fu1 = document.getElementsByName("datafile");

var filename = fu1[0].value;

filename = filename.substring(filename.lastIndexOf("\\")+1);

alert("You selected " + filename);

frm.action = "http://localhost:64444/ACE/fileUpload?fileName="+filename;

return true;

}

Please specify a file, or a set of files:

这里出了什么问题?

非常感谢帮助.

编辑1:

如果输入文件是包含文本的文本文件:1234567890

输出文件包含内容:

------WebKitFormBoundaryKBRUiUWrIpW9wq2j

Content-Disposition: form-data; name="textline"

------WebKitFormBoundaryKBRUiUWrIpW9wq2j

Content-Disposition: form-data; name="datafile"; filename="test.txt"

Content-Type: text/plain

1234567890

------WebKitFormBoundaryKBRUiUWrIpW9wq2j--

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值