• 团队开发冲刺日(十四)


      记录功能已经完成,实现参数+txt文件+图片文件的提交,servlet接收并将文件路径存储入库,我们目前决定存储文件的方式是存储其路径,当然这份代码没有连接服务器,我是拿本地试的。先看一下效果截图:

     

     

     

     接下来看看代码:

    Android端:

    【主要功能实现】MainActivity.java:

      1 package com.example.toa;
      2 
      3 import java.io.ByteArrayOutputStream;
      4 import java.io.File;
      5 import java.io.FileNotFoundException;
      6 import java.io.FileOutputStream;
      7 import java.io.IOException;
      8 import java.io.RandomAccessFile;
      9 import java.text.SimpleDateFormat;
     10 import java.util.ArrayList;
     11 import java.util.Date;
     12 import java.util.HashMap;
     13 import java.util.Set;
     14 
     15 import android.annotation.SuppressLint;
     16 import android.app.Activity;
     17 import android.app.AlertDialog;
     18 import android.app.AlertDialog.Builder;
     19 import android.content.DialogInterface;
     20 import android.content.Intent;
     21 import android.content.pm.ActivityInfo;
     22 import android.graphics.Bitmap;
     23 import android.graphics.BitmapFactory;
     24 import android.net.Uri;
     25 import android.os.Bundle;
     26 import android.os.Environment;
     27 import android.provider.MediaStore;
     28 import android.text.TextUtils;
     29 import android.util.Log;
     30 import android.view.LayoutInflater;
     31 import android.view.View;
     32 import android.view.Window;
     33 import android.view.WindowManager;
     34 import android.widget.AdapterView;
     35 import android.widget.AdapterView.OnItemClickListener;
     36 import android.widget.Button;
     37 import android.widget.EditText;
     38 import android.widget.GridView;
     39 import android.widget.ImageView;
     40 import android.widget.RadioGroup;
     41 import android.widget.SimpleAdapter;
     42 import android.widget.SimpleAdapter.ViewBinder;
     43 import android.widget.Toast;
     44 
     45 import org.jetbrains.annotations.NotNull;
     46 
     47 import okhttp3.Call;
     48 import okhttp3.Callback;
     49 import okhttp3.MediaType;
     50 import okhttp3.MultipartBody;
     51 import okhttp3.OkHttpClient;
     52 import okhttp3.Request;
     53 import okhttp3.RequestBody;
     54 import okhttp3.Response;
     55 
     56 
     57 public class MainActivity extends Activity implements
     58         MyDialog.OnButtonClickListener, OnItemClickListener{
     59     private MyDialog dialog;// 图片选择对话框
     60     public static final int NONE = 0;
     61     public static final int PHOTOHRAPH = 1;// 拍照
     62     public static final int PHOTOZOOM = 2; // 缩放
     63     public static final int PHOTORESOULT = 3;// 结果
     64     public static final String IMAGE_UNSPECIFIED = "image/*";
     65     public static final MediaType PNG = MediaType.parse("image/png");
     66 
     67     private GridView gridView; // 网格显示缩略图
     68     private final int IMAGE_OPEN = 4; // 打开图片标记
     69     private String pathImage; // 选择图片路径
     70     private Bitmap bmp; // 导入临时图片
     71     private ArrayList<HashMap<String, Bitmap>> imageItem;
     72     private SimpleAdapter simpleAdapter; // 适配器
     73     private EditText note; // 笔记文本
     74     private EditText title; // 标题文本
     75     private EditText kemu; //学科
     76     private Button handin; // 上传按钮
     77     private RadioGroup rg; // 单选按钮组
     78     private boolean judge; // 判定公开/私有
     79 
     80     @SuppressLint("SourceLockedOrientationActivity")
     81     @Override
     82     protected void onCreate(Bundle savedInstanceState) {
     83         super.onCreate(savedInstanceState);
     84         requestWindowFeature(Window.FEATURE_NO_TITLE);
     85         /*
     86          * 防止键盘挡住输入框 不希望遮挡设置activity属性 android:windowSoftInputMode="adjustPan"
     87          * 希望动态调整高度 android:windowSoftInputMode="adjustResize"
     88          */
     89         getWindow().setSoftInputMode(
     90                 WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
     91         // 锁定屏幕
     92         setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
     93         setContentView(R.layout.activity_main);
     94         //点击事件
     95         init();
     96         //加载图片与回显
     97         initData();
     98     }
     99 
    100     private void init() {
    101         //声明
    102         note = (EditText)findViewById(R.id.note);
    103         gridView = (GridView) findViewById(R.id.gridView);
    104         handin = (Button)findViewById(R.id.handin);
    105         title = (EditText)findViewById(R.id.title);
    106         kemu = (EditText)findViewById(R.id.kemu);
    107         rg = (RadioGroup)findViewById(R.id.rg);
    108         note.setHorizontallyScrolling(true);
    109         gridView.setOnItemClickListener(this);
    110         dialog = new MyDialog(this);
    111         dialog.setOnButtonClickListener(this);
    112         // activity中调用其他activity中组件的方法
    113         LayoutInflater layout = this.getLayoutInflater();
    114         View view = layout.inflate(R.layout.layout_select_photo, null);
    115 
    116         //单选按钮(公开/私有)
    117         rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    118             @Override
    119             public void onCheckedChanged(RadioGroup group, int checkedId) {
    120                 if(checkedId == R.id.ok){
    121                     judge = true;
    122                 }else{
    123                     judge = false;
    124                 }
    125             }
    126         });
    127 
    128         handin.setOnClickListener(new View.OnClickListener() {
    129             //是否公开
    130             private String see_str = "";
    131             //正文
    132             private String note_str = "";
    133             //标题
    134             private String title_str = "";
    135             //用户名(登录界面传参获取)
    136             private String user_str = "try";
    137             //学科
    138             private  String kemu_str = "";
    139             //年级(传参获取)
    140             private String year_str = "3";
    141             @Override
    142             public void onClick(View v) {
    143                 if(judge){
    144                     see_str = "公开";
    145                 }else{
    146                     see_str = "私有";
    147                 }
    148                 note_str = note.getText().toString();
    149                 title_str = title.getText().toString();
    150                 kemu_str = kemu.getText().toString();
    151 
    152                 //本地Tomcat,注意不能写localhost,写本机的ip地址【连接服务器时记得改地址】
    153                 String URL="http://192.168.101.18:8080/CloudNote/CloudServlet";
    154                 //URL携带部分参数
    155                 URL+="?title="+title_str+"&see="+see_str+"&user="+user_str+"&kemu="+kemu_str+"&year="+year_str;
    156                 //OKHttp
    157                 OkHttpClient client = new OkHttpClient();
    158                 MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.ALTERNATIVE);
    159                 //文本文件
    160                 MediaType NoteType = MediaType.parse("text/html;charset=utf-8");
    161                 //设置文件命名前缀部分
    162                 String noteuser = user_str+"_note";
    163                 File Notefile = doString(note_str,noteuser);
    164                 builder.addFormDataPart("note",Notefile.getName(),RequestBody.create(NoteType,Notefile));
    165 
    166                 //图片文件,设定最多上传3张,不包括+号图片。
    167                 int pic_i=0;
    168                 for(HashMap<String,Bitmap>pic:imageItem){
    169                     Set<String> set=pic.keySet();
    170                     for(String key:set){
    171                         if(pic_i==0){
    172                             //跳过默认的+号图片
    173                             pic_i++;
    174                             continue;
    175                         }
    176                         //取出bitmap,转换成file,上传
    177                         else if(pic_i==1){
    178                             Bitmap fbm1 = pic.get(key);
    179                             //设置文件命名前缀部分
    180                             String image1user = user_str+"_image1";
    181                             //调用方法生成图片文件
    182                             File dofile = doImage(fbm1,image1user);
    183                             builder.addFormDataPart("image1",dofile.getName(),RequestBody.create(PNG,dofile));
    184                             pic_i++;
    185                         }
    186                         else if(pic_i==2){
    187                             Bitmap fbm2 = pic.get(key);
    188                             //设置文件命名前缀部分
    189                             String image2user = user_str+"_image2";
    190                             //调用方法生成图片文件
    191                             File dofile = doImage(fbm2,image2user);
    192                             builder.addFormDataPart("image2",dofile.getName(),RequestBody.create(PNG,dofile));
    193                             pic_i++;
    194                         }
    195                         else if(pic_i==3){
    196                             Bitmap fbm3 = pic.get(key);
    197                             //设置文件命名前缀部分
    198                             String image3user = user_str+"_image3";
    199                             //调用方法生成图片文件
    200                             File dofile = doImage(fbm3,image3user);
    201                             builder.addFormDataPart("image3",dofile.getName(),RequestBody.create(PNG,dofile));
    202                             pic_i++;
    203                         }
    204                     }
    205                 }
    206                 RequestBody requestBody = builder.build();
    207                 Request request = new Request.Builder().url(URL)
    208                         .post(requestBody)
    209                         .build();
    210                 client.newCall(request).enqueue(new Callback() {
    211                     @Override
    212                     public void onFailure(@NotNull Call call, @NotNull IOException e) {
    213                         Log.i("TRYxxx","连接失败");
    214                         e.printStackTrace();
    215                     }
    216 
    217                     @Override
    218                     public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {
    219                         Log.i("TRYxxx","连接的消息"+response.message());
    220                         if(response.isSuccessful()){
    221                             Log.i("TRYxxx","连接成功");
    222                         }
    223                     }
    224                 });
    225             }
    226         });
    227     }
    228     private void initData() {
    229         /*
    230          * 载入默认图片添加图片加号
    231          */
    232         bmp = BitmapFactory.decodeResource(getResources(),
    233                 R.drawable.ic_addpic); // 加号
    234         imageItem = new ArrayList<HashMap<String, Bitmap>>();
    235         HashMap<String, Bitmap> map = new HashMap<String, Bitmap>();
    236         map.put("itemImage", bmp);
    237         imageItem.add(map);
    238         simpleAdapter = new SimpleAdapter(this, imageItem,
    239                 R.layout.griditem_addpic, new String[] { "itemImage" },
    240                 new int[] { R.id.imageView1 });
    241         simpleAdapter.setViewBinder(new ViewBinder() {
    242             @Override
    243             public boolean setViewValue(View view, Object data,
    244                                         String textRepresentation) {
    245                 // TODO Auto-generated method stub
    246                 if (view instanceof ImageView && data instanceof Bitmap) {
    247                     ImageView i = (ImageView) view;
    248                     i.setImageBitmap((Bitmap) data);
    249                     return true;
    250                 }
    251                 return false;
    252             }
    253         });
    254         gridView.setAdapter(simpleAdapter);
    255     }
    256 
    257     //Bitmap转file
    258     public static File doImage(Bitmap fbitmap, String user) {
    259         ByteArrayOutputStream fbaos = new ByteArrayOutputStream();
    260         fbitmap.compress(Bitmap.CompressFormat.JPEG,100,fbaos);
    261         int options = 100;
    262         //判断是否大于20kb,是则继续压缩
    263         while(fbaos.toByteArray().length/1024>20){
    264             fbaos.reset();
    265             options-=10;
    266             fbitmap.compress(Bitmap.CompressFormat.JPEG,options,fbaos);
    267             long length = fbaos.toByteArray().length;
    268         }
    269         SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
    270         Date date = new Date(System.currentTimeMillis());
    271         String filename = user+"_"+format.format(date);
    272         String filepath = Environment.getExternalStorageDirectory().toString()+"/CloudNoteImage";
    273         File pathfile = new File(filepath);
    274         if(!pathfile.exists()){
    275             pathfile.mkdir();
    276         }
    277         File file = new File(filepath,filename+".png");
    278         //注意创建文件,否则会发生文件读取错误
    279         if(!file.exists()){
    280             try{
    281                 file.createNewFile();
    282             }catch (IOException e){
    283                 e.printStackTrace();
    284             }
    285         }
    286         try{
    287             FileOutputStream fos = new FileOutputStream(file);
    288             try{
    289                 fos.write(fbaos.toByteArray());
    290                 fos.flush();
    291                 fos.close();
    292             } catch (IOException e) {
    293                 e.printStackTrace();
    294             }
    295         }catch (IOException e){
    296             e.printStackTrace();
    297         }
    298         return file;
    299     }
    300 
    301     //将正文信息写入txt文件
    302     public static File doString(String strwrite, String user){
    303         //取时间
    304         SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");
    305         Date date = new Date(System.currentTimeMillis());
    306         //生成文件名
    307         String filename = user+"_"+format.format(date);
    308         String filepath = Environment.getExternalStorageDirectory().toString()+"/CloudNoteTXT";
    309         //创建文件
    310         File pathfile = new File(filepath);
    311         if(!pathfile.exists()){
    312             pathfile.mkdir();
    313         }
    314         File file = new File(filepath,filename+".txt");
    315         if(!file.exists()){
    316             try{
    317                 file.createNewFile();
    318             }catch (IOException e){
    319                 e.printStackTrace();
    320             }
    321         }
    322         try{
    323             FileOutputStream outputStream = new FileOutputStream(file);
    324             outputStream.write(strwrite.getBytes());
    325             outputStream.close();
    326         } catch (IOException e) {
    327             e.printStackTrace();
    328         }
    329         return file;
    330     }
    331     //调用相机
    332     @Override
    333     public void camera() {
    334         // TODO Auto-generated method stub
    335         Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    336         intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
    337                 Environment.getExternalStorageDirectory(), "temp.jpg")));
    338         startActivityForResult(intent, PHOTOHRAPH);
    339     }
    340 
    341     //调用相册
    342     @Override
    343     public void gallery() {
    344         // TODO Auto-generated method stub
    345         Intent intent = new Intent(Intent.ACTION_PICK,
    346                 android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    347         startActivityForResult(intent, IMAGE_OPEN);
    348 
    349     }
    350 
    351     @Override
    352     public void cancel() {
    353         // TODO Auto-generated method stub
    354         dialog.cancel();
    355     }
    356 
    357     @Override
    358     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    359         // TODO Auto-generated method stub
    360         super.onActivityResult(requestCode, resultCode, data);
    361 
    362         if (resultCode == NONE)
    363             return;
    364         // 拍照
    365         if (requestCode == PHOTOHRAPH) {
    366             // 设置文件保存路径这里放在跟目录下
    367             File picture = new File(Environment.getExternalStorageDirectory()
    368                     + "/temp.jpg");
    369             startPhotoZoom(Uri.fromFile(picture));
    370         }
    371 
    372         if (data == null)
    373             return;
    374 
    375         // 处理结果
    376         if (requestCode == PHOTORESOULT) {
    377             Bundle extras = data.getExtras();
    378             if (extras != null) {
    379                 Bitmap photo = extras.getParcelable("data");
    380                 ByteArrayOutputStream stream = new ByteArrayOutputStream();
    381                 photo.compress(Bitmap.CompressFormat.JPEG, 75, stream);// (0-100)压缩文件
    382                 // 将图片放入gridview中
    383                 HashMap<String, Bitmap> map = new HashMap<String, Bitmap>();
    384                 map.put("itemImage", photo);
    385                 imageItem.add(map);
    386                 simpleAdapter = new SimpleAdapter(this, imageItem,
    387                         R.layout.griditem_addpic, new String[] { "itemImage" },
    388                         new int[] { R.id.imageView1 });
    389                 simpleAdapter.setViewBinder(new ViewBinder() {
    390                     @Override
    391                     public boolean setViewValue(View view, Object data,
    392                                                 String textRepresentation) {
    393                         // TODO Auto-generated method stub
    394                         if (view instanceof ImageView && data instanceof Bitmap) {
    395                             ImageView i = (ImageView) view;
    396                             i.setImageBitmap((Bitmap) data);
    397                             return true;
    398                         }
    399                         return false;
    400                     }
    401                 });
    402                 gridView.setAdapter(simpleAdapter);
    403                 simpleAdapter.notifyDataSetChanged();
    404                 dialog.dismiss();
    405             }
    406 
    407         }
    408         // 打开图片
    409         if (resultCode == RESULT_OK && requestCode == IMAGE_OPEN) {
    410             startPhotoZoom(data.getData());
    411         }
    412         super.onActivityResult(requestCode, resultCode, data);
    413 
    414     }
    415 
    416     @Override
    417     protected void onResume() {
    418         // TODO Auto-generated method stub
    419         super.onResume();
    420         //判定有图片添加
    421         if (!TextUtils.isEmpty(pathImage)) {
    422             //bitmap回显
    423             Bitmap addbmp = BitmapFactory.decodeFile(pathImage);
    424             //将信息存入Map中
    425             HashMap<String, Bitmap> map = new HashMap<String, Bitmap>();
    426             map.put("itemImage", addbmp);
    427             imageItem.add(map);
    428             //在griditem_addpic.xml中向imageView1添加图片
    429             simpleAdapter = new SimpleAdapter(this, imageItem,
    430                     R.layout.griditem_addpic, new String[] { "itemImage" },
    431                     new int[] { R.id.imageView1 });
    432             simpleAdapter.setViewBinder(new ViewBinder() {
    433                 @Override
    434                 public boolean setViewValue(View view, Object data,
    435                                             String textRepresentation) {
    436                     // TODO Auto-generated method stub
    437                     if (view instanceof ImageView && data instanceof Bitmap) {
    438                         ImageView i = (ImageView) view;
    439                         i.setImageBitmap((Bitmap) data);
    440                         return true;
    441                     }
    442                     return false;
    443                 }
    444             });
    445             gridView.setAdapter(simpleAdapter);
    446             simpleAdapter.notifyDataSetChanged();
    447             // 刷新后释放防止手机休眠后自动添加
    448             pathImage = null;
    449             dialog.dismiss();
    450         }
    451 
    452     }
    453 
    454     @Override
    455     public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
    456         // TODO Auto-generated method stub
    457         if (imageItem.size() == 4&&position==0) { // 第一张为默认图片,点击+号时才判定是否已满
    458             Toast.makeText(MainActivity.this, "图片数3张已满",
    459                     Toast.LENGTH_SHORT).show();
    460         } else if (position == 0) { // 点击图片位置为+ 0对应0张图片
    461             // 选择图片
    462             dialog.show();
    463 
    464             // 通过onResume()刷新数据
    465         } else {
    466             dialog(position);
    467         }
    468 
    469     }
    470 
    471     /*
    472      * Dialog对话框提示用户删除操作 position为删除图片位置
    473      */
    474     protected void dialog(final int position) {
    475         AlertDialog.Builder builder = new Builder(MainActivity.this);
    476         builder.setMessage("确认移除已添加图片吗?");
    477         builder.setTitle("提示");
    478         builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    479             @Override
    480             public void onClick(DialogInterface dialog, int which) {
    481                 dialog.dismiss();
    482                 imageItem.remove(position);
    483                 simpleAdapter.notifyDataSetChanged();
    484             }
    485         });
    486         builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    487             @Override
    488             public void onClick(DialogInterface dialog, int which) {
    489                 dialog.dismiss();
    490             }
    491         });
    492         builder.create().show();
    493     }
    494 
    495     public void startPhotoZoom(Uri uri) {
    496         Intent intent = new Intent("com.android.camera.action.CROP");
    497         intent.setDataAndType(uri, IMAGE_UNSPECIFIED);
    498         intent.putExtra("crop", "true");
    499         // aspectX aspectY 是宽高的比例
    500         intent.putExtra("aspectX", 1);
    501         intent.putExtra("aspectY", 1);
    502         // outputX outputY 是裁剪图片宽高
    503         intent.putExtra("outputX", 64);
    504         intent.putExtra("outputY", 64);
    505         intent.putExtra("return-data", true);
    506         startActivityForResult(intent, PHOTORESOULT);
    507     }
    508 
    509 }

    这里一些代码细节在之前的开发总结提到过了,这里不再多提。

    其他后台代码如Dialog,GridView参照我的冲刺日(四)博客,与原博主无异,感谢原博主的帮助。

    主界面布局文件做出了一些改动,主要是增设了“学科/关键字”输入框,代码如下:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3     xmlns:app="http://schemas.android.com/apk/res-auto"
     4     xmlns:tools="http://schemas.android.com/tools"
     5     android:layout_width="match_parent"
     6     android:layout_height="match_parent"
     7     android:orientation="vertical"
     8     tools:context=".MainActivity">
     9 
    10     <LinearLayout
    11         android:layout_width="wrap_content"
    12         android:layout_height="wrap_content"
    13         android:orientation="horizontal">
    14 
    15         <LinearLayout
    16             android:layout_width="wrap_content"
    17             android:layout_height="wrap_content"
    18             android:orientation="vertical">
    19 
    20             <EditText
    21                 android:id="@+id/title"
    22                 android:layout_width="300dp"
    23                 android:layout_height="wrap_content"
    24                 android:hint="请输入标题"></EditText>
    25 
    26             <EditText
    27                 android:id="@+id/kemu"
    28                 android:layout_width="150dp"
    29                 android:layout_height="wrap_content"
    30                 android:hint="学科/关键字"
    31                 ></EditText>
    32 
    33         </LinearLayout>
    34         <RadioGroup
    35             android:id="@+id/rg"
    36             android:layout_width="wrap_content"
    37             android:layout_height="wrap_content"
    38             android:layout_marginLeft="25dp"
    39             >
    40             <RadioButton
    41                 android:layout_width="wrap_content"
    42                 android:layout_height="wrap_content"
    43                 android:id="@+id/ok"
    44                 android:text="公开"
    45                 android:checked="false"
    46                 >
    47             </RadioButton>
    48             <RadioButton
    49                 android:layout_width="wrap_content"
    50                 android:layout_height="wrap_content"
    51                 android:id="@+id/no"
    52                 android:text="私有"
    53                 android:checked="true"
    54                 >
    55             </RadioButton>
    56         </RadioGroup>
    57 
    58     </LinearLayout>
    59 
    60     <EditText
    61         android:id="@+id/note"
    62         android:layout_width="match_parent"
    63         android:layout_height="500dp"
    64         android:gravity="top"
    65         android:singleLine="false"
    66         android:inputType="textMultiLine"
    67         android:scrollbars="vertical"
    68         android:maxLines="20"
    69         android:hint="请输入正文"
    70         ></EditText>
    71 
    72     <com.example.toa.MyGridView
    73         android:id="@+id/gridView"
    74         android:layout_width="match_parent"
    75         android:layout_height="wrap_content"
    76         android:columnWidth="90dp"
    77         android:layout_margin="5dp"
    78         android:layout_weight="111"
    79         android:gravity="center"
    80         android:horizontalSpacing="5dp"
    81         android:numColumns="4"
    82         android:scrollbars="none"
    83         android:stretchMode="columnWidth">
    84     </com.example.toa.MyGridView>
    85 
    86     <Button
    87         android:id="@+id/handin"
    88         android:layout_width="match_parent"
    89         android:layout_height="50dp"
    90         android:text="上传"
    91         >
    92     </Button>
    93 </LinearLayout>

    Servlet:

    CloudServlet(接收文件和参数)【参考博客冲刺日(十三)】

      1 package Servlet;
      2 
      3 import java.io.FileOutputStream;
      4 import java.io.IOException;
      5 import java.io.InputStream;
      6 import java.io.OutputStream;
      7 import java.util.List;
      8 
      9 import javax.servlet.ServletException;
     10 import javax.servlet.annotation.WebServlet;
     11 import javax.servlet.http.HttpServlet;
     12 import javax.servlet.http.HttpServletRequest;
     13 import javax.servlet.http.HttpServletResponse;
     14 
     15 import org.apache.commons.fileupload.FileItem;
     16 import org.apache.commons.fileupload.FileUploadException;
     17 import org.apache.commons.fileupload.disk.DiskFileItemFactory;
     18 import org.apache.commons.fileupload.servlet.ServletFileUpload;
     19 
     20 import Dao.InsertDao;
     21 
     22 /**
     23  * Servlet implementation class CloudServlet
     24  */
     25 @WebServlet("/CloudServlet")
     26 public class CloudServlet extends HttpServlet {
     27     private static final long serialVersionUID = 1L;
     28        
     29     /**
     30      * @see HttpServlet#HttpServlet()
     31      */
     32     public CloudServlet() {
     33         super();
     34         // TODO Auto-generated constructor stub
     35     }
     36 
     37     /**
     38      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     39      */
     40     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     41         // TODO Auto-generated method stub
     42         response.getWriter().append("Served at: ").append(request.getContextPath());
     43     }
     44 
     45     /**
     46      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     47      */
     48     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     49         // TODO Auto-generated method stub
     50         request.setCharacterEncoding("utf-8");
     51         response.setContentType("text/html;charset=utf-8;");
     52         
     53         //标题
     54         String title = request.getParameter("title");
     55         //公开/私有
     56         String see = request.getParameter("see");
     57         //用户名
     58         String user = request.getParameter("user");
     59         //学科
     60         String kemu = request.getParameter("kemu");
     61         //年级
     62         String year = request.getParameter("year");
     63         //TXT文件路径(传参用)
     64         String txtfile = null;
     65         //图片文件1路径(传参用)
     66         String image1file = null;
     67         //图片文件2路径(传参用)
     68         String image2file = null;
     69         //图片文件3路径(传参用)
     70         String image3file = null;
     71         
     72         //图片存储文件夹【服务器端记得构建,这是本地的】
     73         String imagepath = "E:/CloudNoteTry/Image";
     74         //笔记存储文件夹【服务器端记得构建,这是本地的】
     75         String txtpath = "E:/CloudNoteTry/Note";
     76         DiskFileItemFactory factory = new DiskFileItemFactory();
     77         ServletFileUpload upload = new ServletFileUpload(factory);
     78         List<FileItem>list;
     79         //第1个文件是txt,234是图片文件
     80         int point=1;
     81         try {
     82             list = upload.parseRequest(request);
     83             for(FileItem item:list) {
     84                 if(!item.isFormField()) {
     85                     String filename = item.getName();
     86                     int len = 0;
     87                     byte buff[] = new byte[1024];
     88                     if(point == 1) {
     89                         txtfile = txtpath+"/"+filename;
     90                         InputStream inputStream = item.getInputStream();
     91                         OutputStream outputStream = new FileOutputStream(txtpath+"/"+filename);
     92                         //读写文件内容
     93                         while((len = inputStream.read(buff))!=-1) {
     94                             outputStream.write(buff,0,len);
     95                         }
     96                         outputStream.flush();
     97                         outputStream.close();
     98                         inputStream.close();
     99                     }else {
    100                         if(point == 2) {
    101                             image1file = imagepath+"/"+filename;
    102                         }else if(point == 3) {
    103                             image2file = imagepath+"/"+filename;
    104                         }else if(point == 4) {
    105                             image3file = imagepath+"/"+filename;
    106                         }
    107                         InputStream inputStream = item.getInputStream();
    108                         OutputStream outputStream = new FileOutputStream(imagepath+"/"+filename);
    109                         //读写文件内容
    110                         while((len = inputStream.read(buff))!=-1) {
    111                             outputStream.write(buff,0,len);
    112                         }
    113                         outputStream.flush();
    114                         outputStream.close();
    115                         inputStream.close();
    116                     }
    117                     point++;
    118                 }
    119             }
    120         }catch(FileUploadException e) {
    121             e.printStackTrace();
    122         }
    123         //判定是否为null,否则可能会报错
    124         if(title==null) {
    125             title="ERROR";
    126         }if(see==null) {
    127             see="ERROR";
    128         }if(user==null) {
    129             user="ERROR";
    130         }if(kemu==null) {
    131             kemu="ERROR";
    132         }if(year==null) {
    133             year="ERROR";
    134         }
    135         
    136         //声明Dao包内InsertDao对象,调用添加方法
    137         InsertDao ins = new InsertDao();
    138         //返回为boolean类型,根据结果判断是否成功
    139         if(ins.insertCN(user, year, kemu, title, txtfile, image1file, image2file, image3file, see)) {
    140             System.out.println("添加成功");
    141         }else {
    142             System.out.println("添加失败");
    143         }
    144     }
    145 
    146 }

    Dao层添加数据入库代码:InsertDao:

     1 package Dao;
     2 
     3 import java.sql.Connection;
     4 import java.sql.SQLException;
     5 import java.sql.Statement;
     6 import util.DBUtil;
     7 
     8 public class InsertDao {
     9     public boolean insertCN(String user,String year,String kemu,String title,String note,String image1,String image2,String image3,String see) {
    10         boolean res = false;
    11         //添加语句,PYDcloud为表名
    12         String sql="insert into PYDcloud(user,nianji,kemu,title,note,image1,image2,image3,SEE)"
    13                 +"values('"+user+"','"+year+"','"+kemu+"','"+title+"','"+note+"','"+image1+"','"+image2+"','"+image3+"','"+see+"')";
    14         Connection conn = DBUtil.getConn();
    15         Statement state = null;
    16         int a = 0;
    17         try {
    18             state = conn.createStatement();
    19             //每执行一条语句,a++
    20             a = state.executeUpdate(sql);
    21         }catch (Exception e) {
    22             e.printStackTrace();
    23         }finally {
    24             try {
    25                 DBUtil.close(state, conn);
    26             } catch (SQLException e) {
    27                 // TODO Auto-generated catch block
    28                 e.printStackTrace();
    29             }
    30         }
    31         if (a > 0) {
    32             //返回为真
    33             res = true;
    34         }
    35         //返回为假
    36         return res;
    37     }
    38 
    39 }

    总结:

    写这个”记录“功能我新学了很多东西,包括图片选择回显,OKHttp等,本来这个任务可以提早完成的,奈何上一周状态实在不佳,对编写代码有许些抵触,然而我们的项目还有很多没有写完,我不能因此直接怠惰下去,这次记录功能画上了一个句号,我也需要调整心态,将这次的工作作为一个教训,要时刻提醒自己不能松懈。

  • 相关阅读:
    Webform中Repeater控件--绑定嵌入C#代码四种方式
    webform中listbox运用,2个相互传值练习1:
    webform基础介绍及页面传值(session,cookie)、跳转页面
    Webform 常用控件
    使用VS建立Web网站及IIS
    linq to object
    linq to sql用partial扩展属性,创建一个部分类(用于多表连接)
    LINQ 图解
    Linq to sql介绍及增、删、改、查
    数据库操作
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/12780729.html
Copyright © 2020-2023  润新知