web服務(wù)中實(shí)現(xiàn)文件的上傳
系統(tǒng)
1667 0
?
最近工作原因要用
vs2003
來開發(fā)
Pocket PC
方面的軟件
.
由于項(xiàng)目需要放棄了項(xiàng)目初期擬定的用
asp.net
移動
WEB
應(yīng)用程序的開發(fā)方式
,
而改用智能設(shè)備應(yīng)用程序來開發(fā)產(chǎn)品
.
其實(shí)智能設(shè)備應(yīng)用程序開發(fā)與
桌面應(yīng)用程序非常類似
,
也是一種
win
窗體開發(fā)
.
該項(xiàng)目為了保持
Pocket PC
中的數(shù)據(jù)和遠(yuǎn)程服務(wù)器的數(shù)據(jù)保持一致
,
用到了
web
服務(wù)技術(shù)
.
其中涉及一個圖片上傳功能的實(shí)現(xiàn)
,
就是把手機(jī)拍攝的圖片及時發(fā)送到遠(yuǎn)程服務(wù)器
.
?
讓我們先建立一個
WEB
服務(wù)
SmartDeviceMobileReportWebService
在其中定義一個方法
UploadFile負(fù)責(zé)接收上傳的圖片,代碼如下:
?1
????????
/**/
///
?
<summary>
?2
????????
///
?上傳文件
?3
????????
///
?
</summary>
?4
????????
///
?
<param?name="fs">
文件的字節(jié)數(shù)組
</param>
?5
????????
///
?
<param?name="FileName">
文件名稱
</param>
?6
????????
///
?
<param?name="content">
說明
</param>
?7
????????
///
?
<returns>
是否文件上載成功
</returns>
?8
????????[WebMethod(Description
=
"
提供
文件上傳
的方法,返回文件是否上載成功
"
)]
?9
????????
public
?
bool
?UploadFile(
byte
[]?b,
string
?FileName)
10
????????
{
11
????????????
try
12
????????????
{
13
????????????????
//
定義并實(shí)例化一個內(nèi)存流,以存放提交上來的字節(jié)數(shù)組。
14
????????????????MemoryStream?memoryStream?
=
?
new
?MemoryStream(b);
15
16
????????????????
//
文件存放目錄
17
????????????????
string
?dir
=
@"
d:\pic\
"
;
18
19
????????????????
//
判斷文件存放目錄是否存在
20
????????????????
if
?(??
!
Directory.Exists(dir)?)
21
????????????????
{
22
????????????????????
return
?
false
;
23
????????????????}
24
25
????????????????
//
定義實(shí)際文件對象,保存上載的文件。
26
????????????????
string
?fileName?
=
??dir?
+
?FileName;
27
28
????????????????
//
創(chuàng)建文件流,要是上載的文件存在就覆蓋
29
????????????????FileStream?fileStream?
=
?
new
?FileStream(fileName,?FileMode.Create);
30
31
????????????????
//
把內(nèi)內(nèi)存里的數(shù)據(jù)寫入文件流
32
????????????????memoryStream.WriteTo(fileStream);
33
34
????????????????
//
關(guān)閉流文件
35
????????????????memoryStream.Close();
36
????????????????fileStream.Close();
37
????????????????
38
????????????????fileStream?
=
?
null
;
39
????????????????memoryStream?
=
?
null
;
40
????????????????
41
????????????????
return
?
true
;
42
????????????}
43
????????????
catch
(?Exception?ex?)
44
????????????
{
45
????????????????
string
?s
=
ex.Message;
46
????????????????
return
?
false
;
47
????????????}
48
????????}
?
再到我的
Pocket PC
客戶端
先引用
web
服務(wù)
http://10.10.10.191/SmartDeviceMobileReportWebService/ReportWebService.asmx
并命名為
ReportWebService
編寫上傳按鈕事件
?1
//
上傳按鈕事件
?2
????????
private
?
void
?uploadbutton_Click(
object
?sender,?System.EventArgs?e)
?3
????????
{
?4
????????????
//
要上傳的文件
?5
????????????
string
?fileFullName
=
this
.fileMsglabel.Text;
?6
????????????
?7
????????????
if
?(?
!
File.Exists(fileFullName)?)
?8
????????????
{
?9
????????????????MessageBox.Show(
"
請選擇圖片
"
);
10
????????????????
return
;
11
????????????}
12
13
????????????
int
?i
=
fileFullName.LastIndexOf(
"
\\
"
);
14
????????????
15
????????????Cursor.Current
=
Cursors.WaitCursor;
16
17
????????????
try
18
????????????
{
19
????????????????
//
調(diào)用WEB服務(wù)
20
????????????????ReportWebService.ReportWebService?r
=
new
?ReportWebService.ReportWebService();
21
????????????
22
????????????????
//
要上傳的文件名
23
????????????????
string
?fileName
=
fileFullName.Substring(i
+
1
);
24
????????????
25
????????????????
//
創(chuàng)建文件的實(shí)例
26
????????????????FileInfo?f
=
new
?FileInfo(fileFullName);
27
????????????
28
????????????????
//
創(chuàng)建只讀?FileStream
29
????????????????FileStream??fileStream?
=
?f.OpenRead()?;
30
????????????????
31
????????????????
byte
[]?byteArray
=
?
new
?
byte
[f.Length];
32
????????????????????
33
????????????????
//
從流中讀取字節(jié)并將該數(shù)據(jù)寫入給定數(shù)組中
34
????????????????fileStream.Read(byteArray,
0
,Convert.ToInt32(?f.Length?));
35
36
????????????????
//
開始調(diào)用web服務(wù)器上的公用方法
37
????????????????
if
?(?
!
r.UploadFile(byteArray,fileName)?)
38
????????????????
{
39
????????????????????MessageBox.Show(
"
數(shù)據(jù)上傳失敗!
"
);
40
????????????????}
41
????????????????
else
42
????????????????
{
43
????????????????????MessageBox.Show(
"
數(shù)據(jù)上傳成功!
"
);
44
????????????????????????????????????}
45
46
????????????????
//
關(guān)閉流文件
47
????????????????fileStream.Close();
48
????????????????fileStream
=
null
;
49
50
????????????}
51
????????????
catch
52
????????????
{
53
????????????????MessageBox.Show(
"
數(shù)據(jù)上傳失敗!
"
);
54
????????????}
55
????????????
finally
56
????????????
{
57
????????????????Cursor.Current
=
Cursors.Default;
58
????????????}
????
59
????????}
圖片效果如下:
選擇文件
上傳數(shù)據(jù)成功
web服務(wù)中實(shí)現(xiàn)文件的上傳
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元