发表于: 2017-11-30 23:36:43

1 694


今天做的事情:


                准备演示代码,发现数据库连接不上,报10038,发生的场景是,昨晚使用360杀毒清理垃圾加速一些列的操作导致的。百度之后找到一个这样的解决方案。具体方法不再操作,链接:https://jingyan.baidu.com/article/63acb44add614761fcc17ec2.html


                昨天使用字节数组上传图片,今天改用了数据流上传,都是使用流上传,代码差别不打,但是上传的方式不一样的。


                数组流上传方法:

public class InputSteamUploadTest {

private String ak;
private String sk;
private String bk;

public InputSteamUploadTest(){

}

public void upload(byte[] newURL,String name){
//构造一个带指定Zone对象的配置类
       Configuration cfg = new Configuration(Zone.zone1());
//...其他参数参考类注释

       UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
       String accessKey = this.ak;
String secretKey = this.sk;
String bucket = this.bk;

//默认不指定key的情况下,以文件内容的hash值作为文件名
       String key = name;

byte[] uploadBytes = newURL;
ByteArrayInputStream byteInputStream=new ByteArrayInputStream(uploadBytes);
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);

try {
Response response = uploadManager.put(byteInputStream,key,upToken,null, null);
//解析上传成功的结果
           DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
           }
}

}

public void setAk(String ak) {
this.ak = ak;
}

public void setBk(String bk) {
this.bk = bk;
}


public void setSk(String sk) {
this.sk = sk;
}


}


                 任务要求在Spring配置账号和密码,所以在Spring.xml中创建一个bean

                

<bean id="inputsteamUpload" class="com.jnshu.demo.InputSteamUploadTest">
<property name="ak" value="your ak "/>
<property name="sk" value="your dk"/>
<property name="bk" value="your cunchu name"/>
</bean>


                   在controller 中扫秒这个bean.

                                                  

                      还有一个知识点,是关于multipartFile ,在jsp页面 表单属性必须要加这个,才能使用这个接口

enctype="multipart/form-data"


                       org.springframework.web.multipart   基于Spring的。

                     接口MultipartFile  是公共的,拓展了InputStreamSource 在多部分请求中收到的上传文件的表示形式。

                     

            

                   基本关于上传图片的步骤已经摸清,所以很好的使用七牛云官网提供的方法进行测试,如果还要拓展的话,就是上传一些小视频什么的。大小是几百M的。


                想做一个下载的功能,这样放在服务器上,发出去url,大家就可以上传和下载。方便 你我他。但是自动选择路径存储,我还得好好想想。先将测试代码贴上。


               

//下载
@Test
public  void download( ) {

String fileName = "A.jpg";
String domainOfBucket = "http://ozv40frey.bkt.clouddn.com";
String encodedFileName = null;
try {
encodedFileName = URLEncoder.encode(fileName, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
String finalUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
System.out.println(finalUrl);

URL url = null;
OutputStream os = null;
URLConnection con = null;
InputStream is = null;
try {
url = new URL(finalUrl);
con = url.openConnection();
con.setConnectTimeout(5 * 1000);
is = con.getInputStream();
byte[] bs = new byte[1024];
int len;
File sf = new File("E:\\QiniuyunPictures");
if (!sf.exists()) {
sf.mkdirs();
}
os = new FileOutputStream(sf.getPath() + "\\" + fileName);
while ((len = is.read(bs)) != -1) {
os.write(bs, 0, len);
}
} catch (IOException e1) {
e1.printStackTrace();
} finally {
try {
if(os != null)
os.close();
} catch (IOException e1) {
e1.printStackTrace();
}
try {
if(is != null)
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}


                  指定了存储的图片名,图片路径,还有要下载的路径,这样有点傻。。不过也还是跑通了/


                 




               还有一点,关于早上讨论的值传递和引用传递,笑然师兄已经在日报里面评论了,我也贴一张图来说明下。

              

               今天带来的是设计模式的单例。


               注意点:  显然单例模式的要点有三个:
    1. 是某个类只能有一个实例;
    2. 是它必须自行创建这个实例;
    3. 是它必须自行向整个系统提供这个实例。
 
  从具体实现角度来说,就是以下三点:
    1. 是单例模式的类只提供私有的构造函数;
    2. 是类定义中含有一个该类的静态私有对象;
    3. 是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。

                    

                    

 所谓“懒汉式”与“饿汉式”的区别,是在于建立单例对象的时间不同。“懒汉式”是在你真正用到的时候才去建这个单例对象:

//懒汉式
   public static class SingletonClass{
private static SingletonClass instance=null;
public static SingletonClass getInstance()
{
if(instance==null)
{
synchronized(SingletonClass.class)
{
if(instance==null)
instance=new SingletonClass();
}
}
return instance;
}
private SingletonClass(){
}
}

//对第一行static的一些解释
// java允许我们在一个类里面定义静态类。比如内部类(nested class)。
//把nested class封闭起来的类叫外部类。
//在java中,我们不能用static修饰顶级类(top level class)。
//只有内部类可以为static。

   //饿汉式
   public static class Singleton{
//在自己内部定义自己的一个
       //实例,只供内部调用
       private static final Singleton instance = new Singleton();
private Singleton(){
//do something
       }
//这里提供了一个供外部访问本class的静态方法,可以直接访问
       public static Singleton getInstance(){
return instance;
}
}

//双重锁
   public static class Singleton2{
private static Singleton instance=null;
private Singleton2(){
//do something
       }
public static Singleton getInstance(){
if(instance==null){
synchronized(Singleton.class){
if(null==instance){
instance=new Singleton();
}
}
}
return instance;
}
}


                



遇到的问题:


                  下载图片时遇到一些问题,明天准备多查查资料



收获:


                七牛云的文档感觉读的很在状态了,将上传的方法实现了字节数组和数据流上传,下载的代码也看了,获取的url,url里面包含name,拓展做一个下载。还有任务七欠缺的东西。





              


返回列表 返回列表
评论

    分享到