国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 淺談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問題

淺談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問題

2021-02-02 11:51晴朗依舊 Java教程

下面小編就為大家?guī)硪黄獪\談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

圖片上傳功能是我們web里面經(jīng)常用到的,獲得的方式也有很多種,這里我用的是request.getinputstream()獲取文件流的方式。想要獲取文件流有兩種方式,附上代碼

?
1
2
3
4
5
6
7
8
9
10
int length = request.getcontentlength();//獲取請(qǐng)求參數(shù)長(zhǎng)度。
byte[] bytes = new byte[length];//定義數(shù)組,長(zhǎng)度為請(qǐng)求參數(shù)的長(zhǎng)度
datainputstream dis = new datainputstream(request.getinputstream);//獲取請(qǐng)求內(nèi)容,轉(zhuǎn)成數(shù)據(jù)輸入流
int readcount = 0;//定義輸入流讀取數(shù)
while(readcount < length){
 int aa= dis.read(bytes,readcount,length); //讀取輸入流,放入bytes數(shù)組,返回每次讀取的數(shù)量
 readcount = aa + readcount; //下一次的讀取開始從readcount開始
}
//讀完之后bytes就是輸入流的字節(jié)數(shù)組,將其轉(zhuǎn)為字符串就能看到
string bb = new string(bytes,"utf-8");

上面這種是利用讀取輸入流的方式,也可以用寫入字節(jié)輸入流的方式獲取,就不需要獲取請(qǐng)求長(zhǎng)度了

?
1
2
3
4
5
6
7
8
9
datainputstream dis = new datainputstream(request.getinputstream());
bytearrayoutputstream baot = new bytearrayoutputstream();
byte[] bytes = new byte[1024]; //定義一個(gè)數(shù)組 用來讀取
int n = 0;//每次讀取輸入流的量
while((n=dis.read(bytes))!=-1){
 baot.write(bytes); //將讀取的字節(jié)流寫入字節(jié)輸出流
}
byte[] outbyte = boat.tobytearray();//將字節(jié)輸出流轉(zhuǎn)為自己數(shù)組。
string bb = new string(outbyte,"utf-8");

這兩種方式都能獲取傳輸?shù)膬?nèi)容,但有兩點(diǎn)一定要注意一下,最開始在獲取的時(shí)候只能獲取到文件的名字卻沒有文件的內(nèi)容,這里附上測(cè)試用的前端代碼:

淺談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問題

上網(wǎng)查了一下,有的人是input標(biāo)簽里面沒有name屬性會(huì)導(dǎo)致這個(gè)問題,但是我并不是沒有name標(biāo)簽。繼續(xù)查是這樣的:

淺談圖片上傳利用request.getInputStream()獲取文件流時(shí)遇到的問題

所以我覺得肯定是缺少了發(fā)送類型所以在form標(biāo)簽中加入了enctype='multipart/form-data',果然可以獲取內(nèi)容了。

然后就是第二個(gè)問題,也是我們通過request.getinputstream()方法獲取文件的話,獲取的內(nèi)容不只是只有文件的,即使你表單中只有一個(gè)file標(biāo)簽。剛開始我就是犯了這個(gè)錯(cuò)誤,用拿到的byte數(shù)組直接輸入或者轉(zhuǎn)成文件都是顯示不出來,后來才意識(shí)到,拿到了inputstream的bytes還要把文件的內(nèi)容從中剝離出來才可以。這里提供一個(gè)方法,具體實(shí)現(xiàn)過程還沒有細(xì)研究,先附上之后再細(xì)看

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
  * 取得圖片數(shù)據(jù)
  *
  * @param requestdata
  * @param contenttype
  * @return
  * @throws ioexception
  */
 private byte[] getimgdata(byte[] requestdata, string contenttype)
   throws ioexception {
  string txtbody = new string(requestdata, "gbk");
  if (!txtbody.contains("image/jpg") && !txtbody.contains("image/jpeg")&& !txtbody.contains("jpg")) {
   return null;
  }
  string boundarytext = contenttype.substring(
    contenttype.lastindexof("=") + 1, contenttype.length());
  // 取得實(shí)際上傳文件的起始與結(jié)束位置
  int pos = txtbody.indexof("filename=\"");
  pos = txtbody.indexof("\n", pos) + 1;
  pos = txtbody.indexof("\n", pos) + 1;
  pos = txtbody.indexof("\n", pos) + 1;
  // 文件描述信息后就文件內(nèi)容,直到為文件邊界為止,從pos開始找邊界
  int boundaryloc = txtbody.indexof(boundarytext, pos) - 4;
  bytearrayoutputstream realdatas = null;
  try {
   int begin = ((txtbody.substring(0, pos)).getbytes("gbk")).length;
   int end = ((txtbody.substring(begin, boundaryloc)).getbytes("gbk")).length;
   realdatas = new bytearrayoutputstream();
   realdatas.write(requestdata, begin, end);
   return realdatas.tobytearray();
  } finally {
   if (null != realdatas) {
    try {
     realdatas.close();
    } catch (ioexception e) {
     logger.error("處理上傳圖片數(shù)據(jù)錯(cuò)誤:", e);
    }
   }
  }
 }

這里的參數(shù)就是請(qǐng)求的內(nèi)容數(shù)組bytes以及請(qǐng)求類型,類型的話我們可以通過request.getcontenttype()方法直接獲取,返回值同樣是byte數(shù)組,返回的byte數(shù)組就是我們上傳圖片的內(nèi)容了。

返回前端的話,直接利用response就可以。

?
1
2
outputstream os = response.getoutputstream();
os.write(bytes);
 

以上這篇淺談圖片上傳利用request.getinputstream()獲取文件流時(shí)遇到的問題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。

原文鏈接:http://www.cnblogs.com/qinglangyijiu/p/7803818.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 九九综合九九 | 精品一区二区三区四区五区 | 欧美日韩一区在线 | 欧美亚洲三级 | 欧美成人一区二免费视频软件 | 黄网页在线观看 | 九九综合 | 欧美在线播放一区 | 网友自拍第一页 | 日韩国产欧美一区 | 久草国产视频 | 黄色美女网站 | 国产中文字幕一区 | 91亚洲精品一区 | 中文字幕婷婷 | 日韩欧美中文字幕在线视频 | 精品久久久久久久久久久久 | 日韩免费一区二区 | 黄色毛片在线看 | 日韩成人免费av | 日日撸| 免费又黄又爽又色的视频 | 懂色av中文字幕一区二区三区 | 精品视频一区二区三区 | 亚洲美女精品视频 | 在线观看黄色 | 一区二区免费在线观看 | 涩涩视频在线看 | 成人欧美一区二区三区色青冈 | 欧美在线观看视频一区二区 | 精品国产一级毛片 | 国产精品久久久久精 | 乳首在线| 青娱乐网| 成人国内精品久久久久一区 | 亚洲品质自拍视频网站 | 黄色在线免费观看 | 久久精品国产精品青草 | 韩国三级午夜理伦三级三 | 黄色电影在线免费观看 | 在线成人免费电影 |